65
65
import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .OracleFlywayConfigurationCustomizer ;
66
66
import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .PostgresqlFlywayConfigurationCustomizer ;
67
67
import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .SqlServerFlywayConfigurationCustomizer ;
68
+ import org .springframework .boot .autoconfigure .jdbc .DataSourceAutoConfiguration ;
68
69
import org .springframework .boot .autoconfigure .jdbc .DataSourceProperties ;
69
70
import org .springframework .boot .autoconfigure .jdbc .EmbeddedDataSourceConfiguration ;
70
71
import org .springframework .boot .autoconfigure .jdbc .JdbcConnectionDetails ;
72
+ import org .springframework .boot .autoconfigure .orm .jpa .HibernateJpaAutoConfiguration ;
71
73
import org .springframework .boot .context .properties .EnableConfigurationProperties ;
72
74
import org .springframework .boot .jdbc .DataSourceBuilder ;
75
+ import org .springframework .boot .jdbc .EmbeddedDatabaseConnection ;
73
76
import org .springframework .boot .jdbc .SchemaManagement ;
74
77
import org .springframework .boot .orm .jpa .EntityManagerFactoryBuilder ;
75
78
import org .springframework .boot .test .context .FilteredClassLoader ;
@@ -489,6 +492,36 @@ void customFlywayWithJpa() {
489
492
.run ((context ) -> assertThat (context ).hasNotFailed ());
490
493
}
491
494
495
+ @ Test
496
+ @ WithMetaInfPersistenceXmlResource
497
+ void jpaApplyDdl () {
498
+ this .contextRunner
499
+ .withConfiguration (
500
+ AutoConfigurations .of (DataSourceAutoConfiguration .class , HibernateJpaAutoConfiguration .class ))
501
+ .run ((context ) -> {
502
+ Map <String , Object > jpaProperties = context .getBean (LocalContainerEntityManagerFactoryBean .class )
503
+ .getJpaPropertyMap ();
504
+ assertThat (jpaProperties ).doesNotContainKey ("hibernate.hbm2ddl.auto" );
505
+ });
506
+ }
507
+
508
+ @ Test
509
+ @ WithMetaInfPersistenceXmlResource
510
+ void jpaAndMultipleDataSourcesApplyDdl () {
511
+ this .contextRunner .withConfiguration (AutoConfigurations .of (HibernateJpaAutoConfiguration .class ))
512
+ .withUserConfiguration (JpaWithMultipleDataSourcesConfiguration .class )
513
+ .run ((context ) -> {
514
+ LocalContainerEntityManagerFactoryBean normalEntityManagerFactoryBean = context
515
+ .getBean ("&normalEntityManagerFactory" , LocalContainerEntityManagerFactoryBean .class );
516
+ assertThat (normalEntityManagerFactoryBean .getJpaPropertyMap ()).containsEntry ("configured" , "normal" )
517
+ .containsEntry ("hibernate.hbm2ddl.auto" , "create-drop" );
518
+ LocalContainerEntityManagerFactoryBean flywayEntityManagerFactoryBean = context
519
+ .getBean ("&flywayEntityManagerFactory" , LocalContainerEntityManagerFactoryBean .class );
520
+ assertThat (flywayEntityManagerFactoryBean .getJpaPropertyMap ()).containsEntry ("configured" , "flyway" )
521
+ .doesNotContainKey ("hibernate.hbm2ddl.auto" );
522
+ });
523
+ }
524
+
492
525
@ Test
493
526
void customFlywayWithJdbc () {
494
527
this .contextRunner
@@ -962,6 +995,13 @@ private ContextConsumer<AssertableApplicationContext> validateFlywayTeamsPropert
962
995
};
963
996
}
964
997
998
+ private static Map <String , ?> configureJpaProperties () {
999
+ Map <String , Object > properties = new HashMap <>();
1000
+ properties .put ("configured" , "manually" );
1001
+ properties .put ("hibernate.transaction.jta.platform" , NoJtaPlatform .INSTANCE );
1002
+ return properties ;
1003
+ }
1004
+
965
1005
@ Configuration (proxyBeanMethods = false )
966
1006
static class FlywayDataSourceConfiguration {
967
1007
@@ -1057,10 +1097,8 @@ FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) {
1057
1097
1058
1098
@ Bean
1059
1099
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean (DataSource dataSource ) {
1060
- Map <String , Object > properties = new HashMap <>();
1061
- properties .put ("configured" , "manually" );
1062
- properties .put ("hibernate.transaction.jta.platform" , NoJtaPlatform .INSTANCE );
1063
- return new EntityManagerFactoryBuilder (new HibernateJpaVendorAdapter (), properties , null )
1100
+ return new EntityManagerFactoryBuilder (new HibernateJpaVendorAdapter (), (ds ) -> configureJpaProperties (),
1101
+ null )
1064
1102
.dataSource (dataSource )
1065
1103
.build ();
1066
1104
}
@@ -1083,14 +1121,52 @@ Flyway customFlyway() {
1083
1121
1084
1122
@ Bean
1085
1123
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean () {
1124
+ return new EntityManagerFactoryBuilder (new HibernateJpaVendorAdapter (),
1125
+ (datasource ) -> configureJpaProperties (), null )
1126
+ .dataSource (this .dataSource )
1127
+ .build ();
1128
+ }
1129
+
1130
+ }
1131
+
1132
+ @ Configuration (proxyBeanMethods = false )
1133
+ static class JpaWithMultipleDataSourcesConfiguration {
1134
+
1135
+ @ Bean
1136
+ @ Primary
1137
+ DataSource normalDataSource () {
1138
+ return new EmbeddedDatabaseBuilder ().setType (EmbeddedDatabaseConnection .HSQLDB .getType ())
1139
+ .generateUniqueName (true )
1140
+ .build ();
1141
+ }
1142
+
1143
+ @ Bean
1144
+ @ Primary
1145
+ LocalContainerEntityManagerFactoryBean normalEntityManagerFactory (EntityManagerFactoryBuilder builder ,
1146
+ DataSource normalDataSource ) {
1086
1147
Map <String , Object > properties = new HashMap <>();
1087
- properties .put ("configured" , "manually " );
1148
+ properties .put ("configured" , "normal " );
1088
1149
properties .put ("hibernate.transaction.jta.platform" , NoJtaPlatform .INSTANCE );
1089
- return new EntityManagerFactoryBuilder (new HibernateJpaVendorAdapter (), properties , null )
1090
- .dataSource (this .dataSource )
1150
+ return builder .dataSource (normalDataSource ).properties (properties ).build ();
1151
+ }
1152
+
1153
+ @ Bean
1154
+ @ FlywayDataSource
1155
+ DataSource flywayDataSource () {
1156
+ return new EmbeddedDatabaseBuilder ().setType (EmbeddedDatabaseConnection .HSQLDB .getType ())
1157
+ .generateUniqueName (true )
1091
1158
.build ();
1092
1159
}
1093
1160
1161
+ @ Bean
1162
+ LocalContainerEntityManagerFactoryBean flywayEntityManagerFactory (EntityManagerFactoryBuilder builder ,
1163
+ @ FlywayDataSource DataSource flywayDataSource ) {
1164
+ Map <String , Object > properties = new HashMap <>();
1165
+ properties .put ("configured" , "flyway" );
1166
+ properties .put ("hibernate.transaction.jta.platform" , NoJtaPlatform .INSTANCE );
1167
+ return builder .dataSource (flywayDataSource ).properties (properties ).build ();
1168
+ }
1169
+
1094
1170
}
1095
1171
1096
1172
@ Configuration
0 commit comments