flyway java使用,如何使用flyway创建数据库?
Question: Is it possible to create a new DB in a migration script and then connect to it? How?
My Scenario:
I'm trying to use flyway in my Java project (RESTful application using Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink) for managing the changes between different developers which are using git. I wrote my init script and ran it with:
PGPASSWORD='123456' psql -U postgres -f migration/V1__initDB.sql
and it worked fine. The problem is that I can't create new DB with my scripts. when I include the following line in my script:
CREATE DATABASE my_database OWNER postgres ENCODING 'UTF8';
I get this error:
org.postgresql.util.PSQLException: ERROR: CREATE DATABASE cannot run inside a transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:395)
at com.googlecode.flyway.core.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:230)
at com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:89)
at com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:252)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:250)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.applyMigration(DbMigrate.java:250)
at com.googlecode.flyway.core.command.DbMigrate.access$700(DbMigrate.java:47)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:189)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:138)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:137)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:872)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:819)
at com.googlecode.flyway.core.Flyway.execute(Flyway.java:1200)
at com.googlecode.flyway.core.Flyway.migrate(Flyway.java:819)
at ir.chom.MyApp.(MyApp.java:28)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1117)
at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:867)
at org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:814)
at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:906)
at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:898)
at org.glassfish.jersey.server.ApplicationHandler.createApplication(ApplicationHandler.java:300)
at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:279)
at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:302)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:724)
It seems that this is a problem with JDBC that uses autocommit option. This option can be disabled with something like this:
Connection connection = dataSource.getConnection();
Connection.setAutoCommit(false); // Disables auto-commit.
but I don't know how to pass this option to flyway connection. Also if I solve this I think I will have problem with passing password to \c command.
解决方案
Flyway always operates within the database used in the jdbc connection string.
Once connected, all scripts run within a transaction. As CREATE DATABASE is not supported within transactions, you will not be able to accomplish what you want.
What you can do however, is create a schema instead. Flyway will even do this for you, if you point it at a non-existing one.
flyway java使用,如何使用flyway创建数据库?相关推荐
- mysql 使用java代码进行操作系统_【MySQL 05】使用Java对MySQL进行操作(创建数据库)...
JDBC连接数据库: 1.加载JDBC驱动程序 2.提供JDBC连接的URL 3.创建数据库的连接 4.创建一个Statement 5.执行SQL语句 6.处理结果 7.关闭JDBC对象 1.加载JD ...
- Android复习07【创建数据库、insert()插入数据、查看数据库、根据列索引获取参数值、根据列名-返回索引、增删改查数据、数据分页、修改表结构、Room框架】
2020-04-09-星期四-第八周 目 录 创建数据库 insert()方法 查看数据库(Save as保存) 菜鸟教程---SQLite数据库 根据 列索引 获取 参数值 列比较多---根据列 ...
- flyway数据迁移_使用Flyway在Java EE中进行数据库迁移
flyway数据迁移 任何Java EE应用程序的数据库模式都会随着业务逻辑一起发展. 这使得数据库迁移对于任何Java EE应用程序都很重要. 您是否还在执行应用程序时手动执行它们? 它仍然是一个锁 ...
- flyway版本号_Spring Boot 集成 Flyway 实现数据库版本控制
在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表.在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速 ...
- java编写创建数据库和表的程序
本文示例可见一斑了,主要是通过Java对SQL语句进行操作,和普通的增删改查的原理是一样的: import java.sql.*; public class Test { public static ...
- jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序
jsf netbeans 您需要非常快速地创建数据库前端吗? NetBeans IDE允许人们以很少的代码就为一组数据库表开发JSF应用程序前端. 现在,本教程是一个老歌,但是一个好东西--对于那些不 ...
- NetBeans Java EE技巧9:从数据库创建JSF应用程序
您需要非常快速地创建数据库前端吗? NetBeans IDE允许人们以极少的编码就非常快速地为一组数据库表开发JSF应用程序前端. 现在,本教程既是老歌,又是老歌--对于那些不了解它的人来说,值得再次 ...
- Oracle Java Cloud系列(02)——创建Java云的应用服务器实例 及 数据库云实例
本指南为整个系列的第二篇,介绍如何创建Oracle数据库云服务与Java云服务,文章整体将分为下面三个部分: 第一步:创建服务前准备 - 密钥与云存储容器 第二步:创建数据库云服务 第三步:创建Jav ...
- java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...
最新文章
- 2022-2028年中国玻璃纤维毡热塑性塑料(GMT)行业市场研究及前瞻分析报告
- 用Python拼图发一个高逼格的朋友圈
- Centos-7.4_安装_Redis_4.0.8
- 什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!...
- 快速上手SpyGlass——CDC检查
- MariaDB Spider 数据库分库分表实践 
分库分表
- python until怎么用_python基础之从认识python到python的使用
- mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
- C Primer Plus(三)
- android 内容提供其,Android内容提供者
- 苹果5越狱教程_unc0ver5.2.0安装方法 iOS13.5用Cydia Impactor或AltStore越狱教程
- 在线图书销售系统顺序图_苏宁易购网上商城在线购物
- c语言写死循环程序,通过简单的例子看c程序死循环
- EM30719 i2c不能正常读
- 【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...
- pyqt5使用pyinstaller打包项目为exe
- 用不了chatgpt,试试Claude-Claude注册教程
- Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器
- 小米华为智能手机未来路不平坦
- CMOS信噪比与感光面积的关系
热门文章
- YUV 4:2:0 格式和YUV411格式区别
- rtmp推流h264+aac
- new/delete和malloc/free的区别(举例说明)(简单点)
- Failed resolution of: Landroid/support/v7/internal/widget/TintManager;异常解决方法
- Thread-方法以及wait、notify简介
- React项目动态设置title标题
- Ubuntu安装Nginx+PHP5.6+MySQL5.6
- 《淘宝店铺装修与促销设计宝典》一6.1 设计全面的店铺客服区
- 机房收费系统--准备工作
- Java面试题阶段汇总