diff --git a/Chapter3-2-4/pom.xml b/Chapter3-2-4/pom.xml new file mode 100755 index 0000000..cdb4d43 --- /dev/null +++ b/Chapter3-2-4/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + com.didispace + demo + 1.0.0 + jar + + demo + Spring Boot project + + + org.springframework.boot + spring-boot-starter-parent + 1.3.2.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + mysql + mysql-connector-java + 5.1.21 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/Chapter3-2-4/src/main/java/com/didispace/Application.java b/Chapter3-2-4/src/main/java/com/didispace/Application.java new file mode 100755 index 0000000..c8fee3c --- /dev/null +++ b/Chapter3-2-4/src/main/java/com/didispace/Application.java @@ -0,0 +1,20 @@ +package com.didispace; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/Chapter3-2-4/src/main/java/com/didispace/DataSourceConfig.java b/Chapter3-2-4/src/main/java/com/didispace/DataSourceConfig.java new file mode 100644 index 0000000..9622419 --- /dev/null +++ b/Chapter3-2-4/src/main/java/com/didispace/DataSourceConfig.java @@ -0,0 +1,49 @@ +package com.didispace; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; + +/** + * @author 程序猿DD + * @version 1.0.0 + * @date 16/3/26 下午9:11. + * @blog http://blog.didispace.com + */ +@Configuration +public class DataSourceConfig { + + @Bean(name = "primaryDataSource") + @Qualifier("primaryDataSource") + @ConfigurationProperties(prefix="spring.datasource.primary") + public DataSource primaryDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "secondaryDataSource") + @Qualifier("secondaryDataSource") + @Primary + @ConfigurationProperties(prefix="spring.datasource.secondary") + public DataSource secondaryDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "primaryJdbcTemplate") + public JdbcTemplate primaryJdbcTemplate( + @Qualifier("primaryDataSource") DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + + @Bean(name = "secondaryJdbcTemplate") + public JdbcTemplate secondaryJdbcTemplate( + @Qualifier("secondaryDataSource") DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + +} diff --git a/Chapter3-2-4/src/main/resources/application.properties b/Chapter3-2-4/src/main/resources/application.properties new file mode 100755 index 0000000..b437ea4 --- /dev/null +++ b/Chapter3-2-4/src/main/resources/application.properties @@ -0,0 +1,9 @@ +spring.datasource.primary.url=jdbc:mysql://localhost:3306/test1 +spring.datasource.primary.username=root +spring.datasource.primary.password=root +spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver + +spring.datasource.secondary.url=jdbc:mysql://localhost:3306/test2 +spring.datasource.secondary.username=root +spring.datasource.secondary.password=root +spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver diff --git a/Chapter3-2-4/src/test/java/com/didispace/ApplicationTests.java b/Chapter3-2-4/src/test/java/com/didispace/ApplicationTests.java new file mode 100755 index 0000000..f8e99e6 --- /dev/null +++ b/Chapter3-2-4/src/test/java/com/didispace/ApplicationTests.java @@ -0,0 +1,51 @@ +package com.didispace; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(Application.class) +public class ApplicationTests { + + @Autowired + @Qualifier("primaryJdbcTemplate") + protected JdbcTemplate jdbcTemplate1; + + @Autowired + @Qualifier("secondaryJdbcTemplate") + protected JdbcTemplate jdbcTemplate2; + + @Before + public void setUp() { + jdbcTemplate1.update("DELETE FROM USER "); + jdbcTemplate2.update("DELETE FROM USER "); + } + + @Test + public void test() throws Exception { + + // 往第一个数据源中插入两条数据 + jdbcTemplate1.update("insert into user(id,name,age) values(?, ?, ?)", 1, "aaa", 20); + jdbcTemplate1.update("insert into user(id,name,age) values(?, ?, ?)", 2, "bbb", 30); + + // 往第二个数据源中插入一条数据,若插入的是第一个数据源,则会主键冲突报错 + jdbcTemplate2.update("insert into user(id,name,age) values(?, ?, ?)", 1, "aaa", 20); + + // 查一下第一个数据源中是否有两条数据,验证插入是否成功 + Assert.assertEquals("2", jdbcTemplate1.queryForObject("select count(1) from user", String.class)); + + // 查一下第一个数据源中是否有两条数据,验证插入是否成功 + Assert.assertEquals("1", jdbcTemplate2.queryForObject("select count(1) from user", String.class)); + + } + + +}