6565import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .OracleFlywayConfigurationCustomizer ;
6666import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .PostgresqlFlywayConfigurationCustomizer ;
6767import org .springframework .boot .autoconfigure .flyway .FlywayAutoConfiguration .SqlServerFlywayConfigurationCustomizer ;
68+ import org .springframework .boot .autoconfigure .jdbc .DataSourceAutoConfiguration ;
6869import org .springframework .boot .autoconfigure .jdbc .DataSourceProperties ;
6970import org .springframework .boot .autoconfigure .jdbc .EmbeddedDataSourceConfiguration ;
7071import org .springframework .boot .autoconfigure .jdbc .JdbcConnectionDetails ;
72+ import org .springframework .boot .autoconfigure .orm .jpa .HibernateJpaAutoConfiguration ;
7173import org .springframework .boot .context .properties .EnableConfigurationProperties ;
7274import org .springframework .boot .jdbc .DataSourceBuilder ;
75+ import org .springframework .boot .jdbc .EmbeddedDatabaseConnection ;
7376import org .springframework .boot .jdbc .SchemaManagement ;
7477import org .springframework .boot .orm .jpa .EntityManagerFactoryBuilder ;
7578import org .springframework .boot .test .context .FilteredClassLoader ;
@@ -489,6 +492,36 @@ void customFlywayWithJpa() {
489492 .run ((context ) -> assertThat (context ).hasNotFailed ());
490493 }
491494
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+
492525 @ Test
493526 void customFlywayWithJdbc () {
494527 this .contextRunner
@@ -962,6 +995,13 @@ private ContextConsumer<AssertableApplicationContext> validateFlywayTeamsPropert
962995 };
963996 }
964997
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+
9651005 @ Configuration (proxyBeanMethods = false )
9661006 static class FlywayDataSourceConfiguration {
9671007
@@ -1057,10 +1097,8 @@ FlywayMigrationInitializer customFlywayMigrationInitializer(Flyway flyway) {
10571097
10581098 @ Bean
10591099 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 )
10641102 .dataSource (dataSource )
10651103 .build ();
10661104 }
@@ -1083,14 +1121,52 @@ Flyway customFlyway() {
10831121
10841122 @ Bean
10851123 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 ) {
10861147 Map <String , Object > properties = new HashMap <>();
1087- properties .put ("configured" , "manually " );
1148+ properties .put ("configured" , "normal " );
10881149 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 )
10911158 .build ();
10921159 }
10931160
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+
10941170 }
10951171
10961172 @ Configuration
0 commit comments