spring boot 项目增加flyway的使用遇到问题解决
来源:互联网 发布:java移动端服务端 编辑:程序博客网 时间:2024/05/24 06:49
测试项目基础来源于官网例子:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-flyway
官网例子修改后目录结构如图:
成功完成官方例子的运行和测试后,迫不及待的想把flyway集成到自己搭建项目中使用,但是每次都是在还未加载flyway就开始进行model的扫描。
遇到问题:
在遇到需要先加载数据方面的操作,都需要在flyway执行完毕后才能加载不然会出现找不到新增的表或者修改的表结构、新增表数据。
解决办法:
在对应的bean上加上@DependsOn注解
实际项目中开启hibernate事务,代码如下:
@Configuration@EnableTransactionManagement(proxyTargetClass = true)public class HibernateConfig { @Value("${hibernate.hbm2ddl.auto}") private String auto; @Value("${hibernate.dialect}") private String dialect; @Value("${hibernate.show_sql}") private String show_sql; @Value("${hibernate.packagesToScan}") private String packagesToScan; @Bean(name = "sessionFactory") @DependsOn("flywayInitializer") public SessionFactory sessionFactory(DataSource dataSource) { LocalSessionFactoryBean bean = new LocalSessionFactoryBean(); bean.setDataSource(dataSource); Properties props = new Properties(); props.put("hibernate.hbm2ddl.auto", auto); props.put("hibernate.dialect", dialect); props.put("hibernate.show_sql", show_sql); bean.setHibernateProperties(props); bean.setPhysicalNamingStrategy(PhysicalNamingStrategyStandardImpl.INSTANCE); bean.setPackagesToScan(StringUtils.split(packagesToScan, ",")); try { bean.afterPropertiesSet(); return bean.getObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } @Bean @DependsOn("flywayInitializer") public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) throws IOException { if (sessionFactory == null) { return null; } return new HibernateTransactionManager(sessionFactory); }}
pom.xml配置清单:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent><artifactId>spring-boot-flyway</artifactId><name>Flyway Sample</name><description>Flyway Sample</description><dependencies><!-- Compile --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-actuator</artifactId></dependency><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
application.properties配置清单:
#datasourcespring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/twd?useUnicode=true&characterEncoding=UTF-8spring.datasource.jdbcInterceptors=org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer#spring jpaspring.jpa.hibernate.ddl-auto=validatespring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplspring.jpa.show-sql=true# FLYWAY (FlywayProperties)flyway.baseline-version=1flyway.enabled=trueflyway.baseline-on-migrate=trueflyway.locations=classpath:db/migration/{vendor}flyway.sql-migration-prefix=Vflyway.sql-migration-suffix=.sql注意:fly.locations中最好加上/{vendor},这样在连接不同数据库源时,会执行不同目录下的sql
V1_1__create.sql清单:
DROP TABLE IF EXISTS `PERSON`;CREATE TABLE `PERSON` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`first_name` varchar(255) not null,`last_name` varchar(255) not null,PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=gbk;
delete from `PERSON`;
insert into `PERSON` (first_name, last_name) values ('Dave', 'Syer');
insert into `PERSON` (first_name, last_name) values ('Dave', 'Syer');
阅读全文
0 0
- spring boot 项目增加flyway的使用遇到问题解决
- Spring Boot项目使用Flyway
- flyway在spring boot中的使用
- Spring Boot Flyway
- flyway的使用
- spring集成flyway的方式
- 新建一个maven spring boot项目中遇到的问题
- spring boot项目实战:跨域问题解决
- spring boot 遇到的坑
- spring boot 遇到的坑
- spring-boot创建项目遇到配置问题
- 关于 Spring boot 项目 偶然遇到 Failure to transfer org.springframework.boot:spring-boot-maven-plugin 问题的解决办法
- 使用gradle来构建Spring boot时遇到的问题
- flyway使用
- 使用spring boot快速构建spring框架的maven项目
- Spring boot项目maven的profile多环境配置不自动替换变量的问题解决
- Flyway的简单介绍及使用
- 使用 eclipse 导入android项目 遇到问题解决
- JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)
- 2132: 中南大学2017年ACM暑期集训前期训练题集(入门题)
- java调用批处理bat文件调用python pdfkit把动态html转pdf
- Android中ListView条目带有左滑显示删除按钮的总结
- kubernetes的service的网络类型ingress的搭建(二)
- spring boot 项目增加flyway的使用遇到问题解决
- Cocos2dx 事件响应机制(1): GLView
- S-数独
- 【PMP认证考试之个人总结】第 2 章 组织和项目生命周期及管理过程
- USACO 1.2 transform
- 第十讲 整合Struts2和MyBatis
- C++虚函数五问
- Kotlin--基本
- POJ 1410 Intersection 笔记