经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
springboot之多数据源配置JdbcTemplate
来源:cnblogs  作者:海之浪子  时间:2018/10/11 9:32:10  对本文有异议

springboot多数据源配置,代码如下

  1. DataSourceConfig
  1. package com.rookie.bigdata.config;
  2. import org.springframework.beans.factory.annotation.Qualifier;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.boot.jdbc.DataSourceBuilder;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Primary;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.sql.DataSource;
  10. /**
  11. * @author
  12. * @date 2018/10/10
  13. */
  14. @Configuration
  15. public class DataSourceConfig {
  16. @Bean(name = "primaryDataSource")
  17. @Qualifier("primaryDataSource")
  18. @ConfigurationProperties(prefix="spring.datasource.primary")
  19. public DataSource primaryDataSource() {
  20. return DataSourceBuilder.create().build();
  21. }
  22. @Bean(name = "secondaryDataSource")
  23. @Qualifier("secondaryDataSource")
  24. @Primary
  25. @ConfigurationProperties(prefix="spring.datasource.secondary")
  26. public DataSource secondaryDataSource() {
  27. return DataSourceBuilder.create().build();
  28. }
  29. @Bean(name = "primaryJdbcTemplate")
  30. public JdbcTemplate primaryJdbcTemplate(
  31. @Qualifier("primaryDataSource") DataSource dataSource) {
  32. return new JdbcTemplate(dataSource);
  33. }
  34. @Bean(name = "secondaryJdbcTemplate")
  35. public JdbcTemplate secondaryJdbcTemplate(
  36. @Qualifier("secondaryDataSource") DataSource dataSource) {
  37. return new JdbcTemplate(dataSource);
  38. }
  39. }

 

  1. StudentServiceImpl
  1. package com.rookie.bigdata.service;
  2. import com.rookie.bigdata.domain.Student;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.beans.factory.annotation.Qualifier;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author
  9. * @date 2018/10/9
  10. */
  11. @Service
  12. public class StudentServiceImpl implements StudentService {
  13. @Autowired
  14. @Qualifier("primaryJdbcTemplate")
  15. private JdbcTemplate jdbcTemplate;
  16. @Autowired
  17. @Qualifier("secondaryJdbcTemplate")
  18. private JdbcTemplate jdbcTemplate2;
  19. /**
  20. * 采用第一个暑假源进行插入数据
  21. * @param student
  22. */
  23. @Override
  24. public void create(Student student) {
  25. jdbcTemplate.update("INSERT INTO student(stu_no,name,age)VALUE (?,?,?)", student.getStuNo(), student.getName(), student.getAge());
  26. }
  27. /**
  28. * 第一个数据源进行插入数据
  29. * @param stuNo
  30. */
  31. @Override
  32. public void deleteByNo(Integer stuNo) {
  33. jdbcTemplate.update("DELETE FROM student WHERE stu_no=?", stuNo);
  34. }
  35. /**
  36. * 第二个数据源进行查询数据
  37. * @param stuNo
  38. * @return
  39. */
  40. @Override
  41. public Integer queryByStuNo(Integer stuNo) {
  42. return jdbcTemplate2.queryForObject("select count(1) from student", Integer.class);
  43. }
  44. }

 

配置文件 application.properties

  1. spring.datasource.primary.url=jdbc:mysql://localhost:3306/springboot
  2. spring.datasource.primary.username=root
  3. spring.datasource.primary.password=root
  4. spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
  5. spring.datasource.secondary.url=jdbc:mysql://localhost:3306/springboot
  6. spring.datasource.secondary.username=root
  7. spring.datasource.secondary.password=root
  8. spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

 

测试代码如下

  1. package com.rookie.bigdata.service;
  2. import com.rookie.bigdata.domain.Student;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. /**
  9. * @author liuxili
  10. * @date 2018/10/10
  11. */
  12. @RunWith(SpringRunner.class)
  13. @SpringBootTest
  14. public class StudentServiceImplTest {
  15. @Autowired
  16. private StudentServiceImpl studentService;
  17. @Test
  18. public void create1() throws Exception {
  19. Student student = new Student();
  20. student.setStuNo(1L);
  21. student.setName("张三");
  22. student.setAge(23);
  23. studentService.create(student);
  24. }
  25. @Test
  26. public void deleteByName1() throws Exception {
  27. studentService.deleteByNo(1);
  28. }
  29. @Test
  30. public void queryByStuNo1() throws Exception {
  31. System.out.println(studentService.queryByStuNo(1));
  32. }
  33. }

 

在运行的时候会出现如下异常问题,运行失败,报出java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.异常

后来经过查资料,发现出现该问题的原因是由于springboot版本的问题,本实例采用的springboot版本为2.0.5,如果将版本改为1.5以前的版本就不会出现如上的问题,其实解决上面的异常主要有如下两种解决方案

方案一:

 按照如下方案进行修改application.properties配置文件,如下:修改完成后,上面的异常不会再出现

  1. spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/springboot
  2. spring.datasource.primary.username=root
  3. spring.datasource.primary.password=root
  4. spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
  5. spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/springboot
  6. spring.datasource.secondary.username=root
  7. spring.datasource.secondary.password=root
  8. spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

 

方案二:

  原有的application.properties配置文件不进行修改,修改DataSourceConfig类中的信息,如下:修改完成后,异常也不会再出现能够正常运行

  application.properties

  1. spring.datasource.primary.url=jdbc:mysql://localhost:3306/springboot
  2. spring.datasource.primary.username=root
  3. spring.datasource.primary.password=root
  4. spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
  5. spring.datasource.secondary.url=jdbc:mysql://localhost:3306/springboot
  6. spring.datasource.secondary.username=root
  7. spring.datasource.secondary.password=root
  8. spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

 

  DataSourceConfig

  

  1. package com.rookie.bigdata.config;
  2. import org.springframework.beans.factory.annotation.Qualifier;
  3. import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Primary;
  8. import org.springframework.jdbc.core.JdbcTemplate;
  9. import javax.sql.DataSource;
  10. /**
  11. * @author
  12. * @date 2018/10/10
  13. */
  14. @Configuration
  15. public class DataSourceConfig {
  16. @Bean(name = "primaryJdbcTemplate")
  17. public JdbcTemplate primaryJdbcTemplate(
  18. @Qualifier("primaryDataSource") DataSource dataSource) {
  19. return new JdbcTemplate(dataSource);
  20. }
  21. @Bean(name = "secondaryJdbcTemplate")
  22. public JdbcTemplate secondaryJdbcTemplate(
  23. @Qualifier("primaryDataSource") DataSource dataSource) {
  24. return new JdbcTemplate(dataSource);
  25. }
  26. @Primary
  27. @Bean(name = "primaryDataSourceProperties")
  28. @Qualifier("primaryDataSourceProperties")
  29. @ConfigurationProperties(prefix = "spring.datasource.primary")
  30. public DataSourceProperties primaryDataSourceProperties() {
  31. return new DataSourceProperties();
  32. }
  33. @Bean(name = "secondaryDataSourceProperties")
  34. @Qualifier("secondaryDataSourceProperties")
  35. @ConfigurationProperties(prefix = "spring.datasource.secondary")
  36. public DataSourceProperties secondaryDataSourceProperties() {
  37. return new DataSourceProperties();
  38. }
  39. @Primary
  40. @Bean(name = "primaryDataSource")
  41. @Qualifier("primaryDataSource")
  42. @ConfigurationProperties(prefix = "spring.datasource.primary")
  43. public DataSource primaryDataSource() {
  44. return primaryDataSourceProperties().initializeDataSourceBuilder().build();
  45. }
  46. @Bean(name = "secondaryDataSource")
  47. @Qualifier("secondaryDataSource")
  48. @ConfigurationProperties(prefix = "spring.datasource.secondary")
  49. public DataSource secondaryDataSource() {
  50. return primaryDataSourceProperties().initializeDataSourceBuilder().build();
  51. }
  52. }

 

至此,springboot 采用多数据源对JdbcTemplate进行配置完美解决

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号