From aee408e74690fb7935864131574495e3b4b6958d Mon Sep 17 00:00:00 2001 From: Loredana Date: Tue, 11 Apr 2017 17:35:35 +0300 Subject: [PATCH 1/3] spring boot mysql autoconfiguration --- spring-boot/pom.xml | 41 ++++++ .../MySQLAutoconfiguration.java | 125 ++++++++++++++++++ .../example/AutoconfigurationApplication.java | 15 +++ .../autoconfiguration/example/MyUser.java | 27 ++++ .../example/MyUserRepository.java | 7 + .../main/resources/META-INF/spring.factories | 4 +- .../src/main/resources/mysql.properties | 5 + .../AutoconfigurationTest.java | 28 ++++ 8 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java create mode 100644 spring-boot/src/main/java/com/baeldung/autoconfiguration/example/AutoconfigurationApplication.java create mode 100644 spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUser.java create mode 100644 spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUserRepository.java create mode 100644 spring-boot/src/main/resources/mysql.properties create mode 100644 spring-boot/src/test/java/com/baeldung/autoconfiguration/AutoconfigurationTest.java diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 5f77be43e389..b00af7fc94ff 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -119,6 +119,12 @@ ${tomee-servlet-api.version} provided + + + mysql + mysql-connector-java + 6.0.6 + @@ -165,6 +171,7 @@ **/*IntegrationTest.java **/*LiveTest.java + **/AutoconfigurationTest.java @@ -190,6 +197,7 @@ **/*LiveTest.java + **/AutoconfigurationTest.java **/*IntegrationTest.java @@ -206,6 +214,39 @@ + + autoconfiguration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + **/*IntegrationTest.java + + + **/AutoconfigurationTest.java + + + + + + + json + + + + + + diff --git a/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java b/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java new file mode 100644 index 000000000000..be69e19dbb47 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java @@ -0,0 +1,125 @@ +package com.baeldung.autoconfiguration; + +import java.util.Arrays; +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.autoconfigure.condition.ConditionMessage; +import org.springframework.boot.autoconfigure.condition.ConditionMessage.Style; +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.ConditionalOnResource; +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.Ordered; +import org.springframework.core.env.Environment; +import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.util.ClassUtils; + +@Configuration +@ConditionalOnClass(DataSource.class) +@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) +@PropertySource("classpath:mysql.properties") +public class MySQLAutoconfiguration { + + @Autowired + private Environment env; + + @Bean + @ConditionalOnProperty("usemysql") + @ConditionalOnMissingBean + public DataSource dataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + if (env.getProperty("mysql.url") != null) { + dataSource.setUrl(env.getProperty("mysql.url")); + } else { + dataSource.setUrl("jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true"); + } + if (env.getProperty("mysql.user") != null) { + dataSource.setUsername(env.getProperty("mysql.user")); + } else { + dataSource.setUsername("mysqluser"); + } + if (env.getProperty("mysql.pass") != null) { + dataSource.setPassword(env.getProperty("mysql.pass")); + } else { + dataSource.setPassword("mysqlpass"); + } + return dataSource; + } + + @Bean + @ConditionalOnBean(name = "dataSource") + @ConditionalOnMissingBean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "com.baeldung.autoconfiguration.example" }); + em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); + if (additionalProperties() != null) { + em.setJpaProperties(additionalProperties()); + } + return em; + } + + @Bean + @ConditionalOnMissingBean(type = "JpaTransactionManager") + JpaTransactionManager transactionManager(final EntityManagerFactory entityManagerFactory) { + final JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(entityManagerFactory); + return transactionManager; + } + + @ConditionalOnResource(resources = "classpath:mysql.properties") + @Conditional(HibernateCondition.class) + final Properties additionalProperties() { + final Properties hibernateProperties = new Properties(); + + if (env.getProperty("mysql-hibernate.hbm2ddl.auto") != null) { + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("mysql-hibernate.hbm2ddl.auto")); + } + if (env.getProperty("mysql-hibernate.dialect") != null) { + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("mysql-hibernate.dialect")); + + } + if (env.getProperty("mysql-hibernate.show_sql") != null) { + hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("mysql-hibernate.show_sql")); + } + return hibernateProperties; + } + + static class HibernateCondition extends SpringBootCondition { + + private static String[] CLASS_NAMES = { "org.hibernate.ejb.HibernateEntityManager", "org.hibernate.jpa.HibernateEntityManager" }; + + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + ConditionMessage.Builder message = ConditionMessage.forCondition("Hibernate"); + for (String className : CLASS_NAMES) { + if (ClassUtils.isPresent(className, context.getClassLoader())) { + return ConditionOutcome.match(message.found("class") + .items(Style.NORMAL, className)); + } + } + return ConditionOutcome.noMatch(message.didNotFind("class", "classes") + .items(Style.NORMAL, Arrays.asList(CLASS_NAMES))); + } + + } +} diff --git a/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/AutoconfigurationApplication.java b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/AutoconfigurationApplication.java new file mode 100644 index 000000000000..f419dbf4fd2f --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/AutoconfigurationApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.autoconfiguration.example; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AutoconfigurationApplication { + @RolesAllowed("*") + public static void main(String[] args) { + System.setProperty("security.basic.enabled", "false"); + SpringApplication.run(AutoconfigurationApplication.class, args); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUser.java b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUser.java new file mode 100644 index 000000000000..31ce0fd9691a --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUser.java @@ -0,0 +1,27 @@ +package com.baeldung.autoconfiguration.example; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class MyUser { + @Id + private String email; + + public MyUser() { + } + + public MyUser(String email) { + super(); + this.email = email; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUserRepository.java b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUserRepository.java new file mode 100644 index 000000000000..fa411bc0b8ec --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/autoconfiguration/example/MyUserRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.autoconfiguration.example; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MyUserRepository extends JpaRepository{ + +} diff --git a/spring-boot/src/main/resources/META-INF/spring.factories b/spring-boot/src/main/resources/META-INF/spring.factories index e3d3aa4c8e50..5f55544eff88 100644 --- a/spring-boot/src/main/resources/META-INF/spring.factories +++ b/spring-boot/src/main/resources/META-INF/spring.factories @@ -1 +1,3 @@ -org.springframework.boot.diagnostics.FailureAnalyzer=com.baeldung.failureanalyzer.MyBeanNotOfRequiredTypeFailureAnalyzer \ No newline at end of file +org.springframework.boot.diagnostics.FailureAnalyzer=com.baeldung.failureanalyzer.MyBeanNotOfRequiredTypeFailureAnalyzer + +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfiguration.MySQLAutoconfiguration \ No newline at end of file diff --git a/spring-boot/src/main/resources/mysql.properties b/spring-boot/src/main/resources/mysql.properties new file mode 100644 index 000000000000..7922903d61a0 --- /dev/null +++ b/spring-boot/src/main/resources/mysql.properties @@ -0,0 +1,5 @@ +usemysql=true + +mysql-hibernate.dialect=org.hibernate.dialect.MySQLDialect +mysql-hibernate.show_sql=true +mysql-hibernate.hbm2ddl.auto=create-drop \ No newline at end of file diff --git a/spring-boot/src/test/java/com/baeldung/autoconfiguration/AutoconfigurationTest.java b/spring-boot/src/test/java/com/baeldung/autoconfiguration/AutoconfigurationTest.java new file mode 100644 index 000000000000..608d0d10bc6b --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/autoconfiguration/AutoconfigurationTest.java @@ -0,0 +1,28 @@ +package com.baeldung.autoconfiguration; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.autoconfiguration.example.AutoconfigurationApplication; +import com.baeldung.autoconfiguration.example.MyUser; +import com.baeldung.autoconfiguration.example.MyUserRepository; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = AutoconfigurationApplication.class) +@EnableJpaRepositories(basePackages = { "com.baeldung.autoconfiguration.example" }) +public class AutoconfigurationTest { + + @Autowired + private MyUserRepository userRepository; + + @Test + public void whenSaveUser_thenOk() { + MyUser user = new MyUser("user@email.com"); + userRepository.save(user); + } + +} From 2a6d13c143a6e62555ee0dd5f35570a79c06d27b Mon Sep 17 00:00:00 2001 From: Loredana Date: Wed, 12 Apr 2017 15:43:29 +0300 Subject: [PATCH 2/3] exclude autoconfig from other main classes --- .../servletcomponentscan/SpringBootAnnotatedApp.java | 4 +++- .../annotation/servletcomponentscan/SpringBootPlainApp.java | 4 +++- .../baeldung/failureanalyzer/FailureAnalyzerApplication.java | 4 +++- .../src/main/java/com/baeldung/git/CommitIdApplication.java | 4 +++- .../internationalization/InternationalizationApp.java | 4 +++- spring-boot/src/main/java/com/baeldung/intro/App.java | 4 +++- .../src/main/java/com/baeldung/servlets/ApplicationMain.java | 4 +++- spring-boot/src/main/java/com/baeldung/utils/Application.java | 4 +++- .../main/java/com/baeldung/webjar/WebjarsdemoApplication.java | 4 +++- spring-boot/src/main/java/org/baeldung/Application.java | 4 +++- .../src/main/java/org/baeldung/boot/DemoApplication.java | 4 +++- .../main/java/org/baeldung/main/SpringBootApplication.java | 4 +++- .../main/java/org/baeldung/session/exception/Application.java | 4 +++- 13 files changed, 39 insertions(+), 13 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java b/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java index b4d416dd9623..d54fa5a7c18b 100644 --- a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java +++ b/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java @@ -4,6 +4,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + /** * using the following annotations are equivalent: *
  • @@ -14,7 +16,7 @@ * @ServletComponentScan(basePackageClasses = {AttrListener.class, HelloFilter.class, HelloServlet.class, EchoServlet.class}) *
*/ -@SpringBootApplication +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) @ServletComponentScan("com.baeldung.annotation.servletcomponentscan.components") public class SpringBootAnnotatedApp { diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java b/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java index 8a39078aac78..44030f440b5d 100644 --- a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java +++ b/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java @@ -3,7 +3,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) @ComponentScan(basePackages = "com.baeldung.annotation.servletcomponentscan.components") public class SpringBootPlainApp { diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java b/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java index 3489732b6f24..9d379cbc090b 100644 --- a/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java +++ b/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java @@ -5,7 +5,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class FailureAnalyzerApplication { @RolesAllowed("*") public static void main(String[] args) { diff --git a/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java b/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java index cd696eae70dd..c077692edb59 100644 --- a/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java +++ b/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java @@ -6,7 +6,9 @@ import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; -@SpringBootApplication(scanBasePackages = { "com.baeldung.git" }) +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(scanBasePackages = { "com.baeldung.git" }, exclude=MySQLAutoconfiguration.class) public class CommitIdApplication { public static void main(String[] args) { SpringApplication.run(CommitIdApplication.class, args); diff --git a/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java b/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java index c92d1c32e632..b743eb4b6184 100644 --- a/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java +++ b/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java @@ -5,7 +5,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class InternationalizationApp { @RolesAllowed("*") public static void main(String[] args) { diff --git a/spring-boot/src/main/java/com/baeldung/intro/App.java b/spring-boot/src/main/java/com/baeldung/intro/App.java index 30e1c2b5ba6e..9553d814ac9f 100644 --- a/spring-boot/src/main/java/com/baeldung/intro/App.java +++ b/spring-boot/src/main/java/com/baeldung/intro/App.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class App { public static void main( String[] args ) diff --git a/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java b/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java index a6ea3757fe30..8965e2f0130e 100644 --- a/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java +++ b/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java @@ -5,7 +5,9 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class ApplicationMain extends SpringBootServletInitializer { public static void main(String[] args) { diff --git a/spring-boot/src/main/java/com/baeldung/utils/Application.java b/spring-boot/src/main/java/com/baeldung/utils/Application.java index a3d9f9130c32..9d5d75bce2ab 100644 --- a/spring-boot/src/main/java/com/baeldung/utils/Application.java +++ b/spring-boot/src/main/java/com/baeldung/utils/Application.java @@ -6,7 +6,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) @ComponentScan(basePackages="com.baeldung.utils") public class Application { diff --git a/spring-boot/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java b/spring-boot/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java index d2135754c950..44d48f5f8f5b 100644 --- a/spring-boot/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java +++ b/spring-boot/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java @@ -4,7 +4,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class WebjarsdemoApplication { public static void main(String[] args) { diff --git a/spring-boot/src/main/java/org/baeldung/Application.java b/spring-boot/src/main/java/org/baeldung/Application.java index aae0c427a98a..c47bb90830c6 100644 --- a/spring-boot/src/main/java/org/baeldung/Application.java +++ b/spring-boot/src/main/java/org/baeldung/Application.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.context.ApplicationContext; -@org.springframework.boot.autoconfigure.SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@org.springframework.boot.autoconfigure.SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class Application { private static ApplicationContext applicationContext; diff --git a/spring-boot/src/main/java/org/baeldung/boot/DemoApplication.java b/spring-boot/src/main/java/org/baeldung/boot/DemoApplication.java index e61d140396ff..2d83b650ecc4 100644 --- a/spring-boot/src/main/java/org/baeldung/boot/DemoApplication.java +++ b/spring-boot/src/main/java/org/baeldung/boot/DemoApplication.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class DemoApplication { public static void main(String[] args) { diff --git a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java b/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java index 582d2d9e9cf9..872426d85054 100644 --- a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java +++ b/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java @@ -14,11 +14,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @RestController -@EnableAutoConfiguration +@EnableAutoConfiguration(exclude=MySQLAutoconfiguration.class) @ComponentScan({ "org.baeldung.common.error", "org.baeldung.common.error.controller", "org.baeldung.common.properties", "org.baeldung.common.resources", "org.baeldung.endpoints", "org.baeldung.service", "org.baeldung.monitor.jmx", "org.baeldung.service" }) public class SpringBootApplication { diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/Application.java b/spring-boot/src/main/java/org/baeldung/session/exception/Application.java index 23d741b98c5a..9f8dadbe55c7 100644 --- a/spring-boot/src/main/java/org/baeldung/session/exception/Application.java +++ b/spring-boot/src/main/java/org/baeldung/session/exception/Application.java @@ -7,8 +7,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean; +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + @EntityScan(basePackageClasses = Foo.class) -@SpringBootApplication +@SpringBootApplication(exclude=MySQLAutoconfiguration.class) public class Application { public static void main(String[] args) { System.setProperty("spring.config.name", "exception"); From 637b3e9e19ca18e964a9af8e9840cc804f3cb082 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 17 Apr 2017 22:37:41 +0300 Subject: [PATCH 3/3] update property condition --- .../MySQLAutoconfiguration.java | 60 +++++++++---------- .../src/main/resources/mysql.properties | 2 +- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java b/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java index be69e19dbb47..bbe2a86e3945 100644 --- a/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java +++ b/spring-boot/src/main/java/com/baeldung/autoconfiguration/MySQLAutoconfiguration.java @@ -16,6 +16,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnResource; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; @@ -36,31 +37,34 @@ @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @PropertySource("classpath:mysql.properties") public class MySQLAutoconfiguration { - @Autowired private Environment env; @Bean - @ConditionalOnProperty("usemysql") + @ConditionalOnProperty(name = "usemysql", havingValue = "local") @ConditionalOnMissingBean public DataSource dataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); - if (env.getProperty("mysql.url") != null) { - dataSource.setUrl(env.getProperty("mysql.url")); - } else { - dataSource.setUrl("jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true"); - } - if (env.getProperty("mysql.user") != null) { - dataSource.setUsername(env.getProperty("mysql.user")); - } else { - dataSource.setUsername("mysqluser"); - } - if (env.getProperty("mysql.pass") != null) { - dataSource.setPassword(env.getProperty("mysql.pass")); - } else { - dataSource.setPassword("mysqlpass"); - } + dataSource.setUrl("jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true"); + dataSource.setUsername("mysqluser"); + dataSource.setPassword("mysqlpass"); + + return dataSource; + } + + @Bean(name = "dataSource") + @ConditionalOnProperty(name = "usemysql", havingValue = "custom") + @ConditionalOnMissingBean + public DataSource dataSource2() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl(env.getProperty("mysql.url")); + dataSource.setUsername(env.getProperty("mysql.user") != null ? env.getProperty("mysql.user") : ""); + dataSource.setPassword(env.getProperty("mysql.pass") != null ? env.getProperty("mysql.pass") : ""); + return dataSource; } @@ -90,17 +94,11 @@ JpaTransactionManager transactionManager(final EntityManagerFactory entityManage @Conditional(HibernateCondition.class) final Properties additionalProperties() { final Properties hibernateProperties = new Properties(); - - if (env.getProperty("mysql-hibernate.hbm2ddl.auto") != null) { - hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("mysql-hibernate.hbm2ddl.auto")); - } - if (env.getProperty("mysql-hibernate.dialect") != null) { - hibernateProperties.setProperty("hibernate.dialect", env.getProperty("mysql-hibernate.dialect")); - - } - if (env.getProperty("mysql-hibernate.show_sql") != null) { - hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("mysql-hibernate.show_sql")); - } + + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("mysql-hibernate.hbm2ddl.auto")); + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("mysql-hibernate.dialect")); + hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("mysql-hibernate.show_sql") != null ? env.getProperty("mysql-hibernate.show_sql") : "false"); + return hibernateProperties; } @@ -113,12 +111,10 @@ public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeM ConditionMessage.Builder message = ConditionMessage.forCondition("Hibernate"); for (String className : CLASS_NAMES) { if (ClassUtils.isPresent(className, context.getClassLoader())) { - return ConditionOutcome.match(message.found("class") - .items(Style.NORMAL, className)); + return ConditionOutcome.match(message.found("class").items(Style.NORMAL, className)); } } - return ConditionOutcome.noMatch(message.didNotFind("class", "classes") - .items(Style.NORMAL, Arrays.asList(CLASS_NAMES))); + return ConditionOutcome.noMatch(message.didNotFind("class", "classes").items(Style.NORMAL, Arrays.asList(CLASS_NAMES))); } } diff --git a/spring-boot/src/main/resources/mysql.properties b/spring-boot/src/main/resources/mysql.properties index 7922903d61a0..27092f852f64 100644 --- a/spring-boot/src/main/resources/mysql.properties +++ b/spring-boot/src/main/resources/mysql.properties @@ -1,4 +1,4 @@ -usemysql=true +usemysql=local mysql-hibernate.dialect=org.hibernate.dialect.MySQLDialect mysql-hibernate.show_sql=true