您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

java之spring boot 1.5.4 配置多数据源

2024/4/17 14:10:46发布6次查看
spring boot 已经支持多数据源配置了,无需网上好多那些编写什么类的,特别麻烦,看看如下解决方案,官方的,放心!
1.首先定义数据源配置
#=====================multiple database config============================ #ds1 first.datasource.url=jdbc:mysql://localhost/test?characterencoding=utf8&usessl=true first.datasource.username=root first.datasource.password=123456 first.datasource.driver-class-name=com.mysql.jdbc.driver first.datasource.type=org.apache.tomcat.jdbc.pool.datasource first.datasource.max-wait=10000 first.datasource.max-active=200 first.datasource.test-on-borrow=true first.datasource.initial-size=10 #ds2 second.datasource.url=jdbc:mysql://localhost/test2?characterencoding=utf8&usessl=true second.datasource.username=root second.datasource.password=123456 second.datasource.driver-class-name=com.mysql.jdbc.driver second.datasource.type=org.apache.tomcat.jdbc.pool.datasource second.datasource.max-wait=10000 second.datasource.max-active=200 second.datasource.test-on-borrow=true second.datasource.initial-size=10
#=====================jpa config================================ #实体类维护数据库表结构的具体行为:update/create/create-drop/validate/none spring.jpa.hibernate.ddl-auto=none #打印sql语句 spring.jpa.show-sql=true #格式化输出的json字符串 spring.jackson.serialization.indent_output=true 2.配置ds1的相关注入对象和启用jpa支持
/**  * created by hdwang on 2017-06-16.  * 第一个数据源配置  * if you are using spring data, you need to configure @enablejparepositories */@configuration @enabletransactionmanagement @enablejparepositories(basepackages = com.hdwang.dao.datajpa.firstds,entitymanagerfactoryref = firstentitymanagerfactory,transactionmanagerref=firsttransactionmanager)public class firstdsconfig {/** * 数据源配置对象      * primary 表示默认的对象,autowire可注入,不是默认的得明确名称注入      * @return */@bean     @primary     @configurationproperties(first.datasource)public datasourceproperties firstdatasourceproperties() {return new datasourceproperties();     }/** * 数据源对象      * @return */@bean     @primary     @configurationproperties(first.datasource)public datasource firstdatasource() {return firstdatasourceproperties().initializedatasourcebuilder().build();     }/** * 实体管理对象      * @param builder 由spring注入这个对象,首先根据type注入(多个就取声明@primary的对象),否则根据name注入      * @return */@bean     @primarypublic localcontainerentitymanagerfactorybean firstentitymanagerfactory(             entitymanagerfactorybuilder builder) {return builder                 .datasource(firstdatasource())                 .packages(com.hdwang.entity.dbfirst)                 .persistenceunit(firstds)                 .build();     }/** * 事务管理对象      * @return */@bean(name = firsttransactionmanager)     @primarypublic platformtransactionmanager transactionmanager(entitymanagerfactory emf){         jpatransactionmanager transactionmanager = new jpatransactionmanager();         transactionmanager.setentitymanagerfactory(emf);return transactionmanager;     }     @bean     @primarypublic jdbctemplate jdbctemplate(){return new jdbctemplate(firstdatasource());     }     @bean     @primarypublic transactiontemplate transactiontemplate(platformtransactionmanager platformtransactionmanager){return new transactiontemplate(platformtransactionmanager);     } }
相关知识点: 1.使用@bean可以创建一个bean对象交给spring容器管理 2.@bean创建的bean对象的名称默认为方法名,也可以指定 3.@bean方法参数表示,接收一个bean对象,默认按照type类型接收注入的对象,若要修改为byname方式,可以使用@qualifier注解注入准确的对象 4.@primary表示该bean为此类型的默认bean,在其他地方引用的时候用@autowired即可按照类型注入,不受同类型多个对象影响 5.enablejparepositories表示启用spring data jpa的支持,也就是jpa的新使用方式,注意basepackages指的事 @repository接口的所在包位置,可配置多个 其他注解就不清楚了!
2.配置ds2的相关注入对象和启用jpa支持
@configuration @enabletransactionmanagement @enablejparepositories(basepackages = com.hdwang.dao.datajpa.secondds, entitymanagerfactoryref = secondentitymanagerfactory,transactionmanagerref = secondtransactionmanager)public class seconddsconfig {     @bean     @configurationproperties(second.datasource)public datasourceproperties seconddatasourceproperties() {return new datasourceproperties();     }     @bean     @configurationproperties(second.datasource)public datasource seconddatasource() {return seconddatasourceproperties().initializedatasourcebuilder().build();     }/** * 实体管理对象      * @param builder  由spring注入这个对象,首先根据type注入(多个就取声明@primary的对象),否则根据name注入      * @return */@beanpublic localcontainerentitymanagerfactorybean secondentitymanagerfactory(             entitymanagerfactorybuilder builder) {return builder                 .datasource(seconddatasource())                 .packages(com.hdwang.entity.dbsecond)                 .persistenceunit(secondds)                 .build();     }/** * 事物管理对象      * @param secondentitymanagerfactory 实体管理工厂对象(按照名称注入)      * @return 平台事物管理器     */@bean(name = secondtransactionmanager)public platformtransactionmanager transactionmanager(@qualifier(secondentitymanagerfactory)localcontainerentitymanagerfactorybean secondentitymanagerfactory){         jpatransactionmanager transactionmanager = new jpatransactionmanager();         transactionmanager.setentitymanagerfactory(secondentitymanagerfactory.getobject());return transactionmanager;     }     @bean(name=jdbctemplate2)public jdbctemplate jdbctemplate(){return new jdbctemplate(seconddatasource());     }     @bean(name = transactiontemplate2)public transactiontemplate transactiontemplate(@qualifier(secondtransactionmanager)platformtransactionmanager transactionmanager){return new transactiontemplate(transactionmanager);     } }
3.repository数据持久层
package com.hdwang.dao.datajpa.firstds; @repositorypublic interface userrepository extends jparepository<user, integer> {/** * spring data jpa 会自动注入实现(根据方法命名规范)      * @return */user findbynumber(string number);     @modifying     @query(delete from user u where u.id = :id)void deleteuser(@param(id)int id); }
package com.hdwang.dao.datajpa.secondds; @repositorypublic interface orderrepository extends jparepository<order, integer> {/** * spring data jpa 会自动注入实现(根据方法命名规范)      * @return */user findbynumber(string number);     @modifying     @query(delete from order o where o.id = :id)void deleteuser(@param(id) int id); }
上面两个接口分属两个数据源,在@enablejparepositories配置好后,这里就可以正确操作相应的数据源了 4.service服务层,注意事物(接口我就不贴了)
@service@transactional(firsttransactionmanager)public class userserviceimpl implements userservice {     @autowiredprivate userrepository userrepository;     @overridepublic user findbyid(int id) {return this.userrepository.findone(id);     }     @overridepublic user findbynumber(string number) {return this.userrepository.findbynumber(number);     }     @overridepublic list<user> findalluserbypage(int page,int size) {         pageable pageable = new pagerequest(page, size);         page<user> users =  this.userrepository.findall(pageable);return users.getcontent();     }     @overridepublic user updateuser(user user,boolean throwex) {         user usernew = this.userrepository.save(user);if(throwex){throw new runtimeexception(throw a ex);         }return usernew;     }     @overridepublic void deleteuser(int id) {this.userrepository.deleteuser(id);     } }
@service@transactional(secondtransactionmanager)public class orderserviceimpl implements orderservice {     @autowiredprivate orderrepository orderrepository;     @overridepublic order findbyid(int id) {return this.orderrepository.findone(id);     }     @overridepublic order updateorder(order order, boolean throwex) {         order ordernew = this.orderrepository.save(order);if(throwex){throw new runtimeexception(throw a ex);         }return ordernew;     } }
知识扩展 1.如果采用传统jpa方式,@enablejparepositories无需配置,配置了也无影响。实现方式如下: ds1相关daoimpl
@persistencecontext private entitymanager entitymanager; ds2相关daoimpl
@persistencecontext(unitname = secondds) private entitymanager entitymanager; 因为ds1的entitymanger声明了@primary,所以无需指明unitname,ds2必须指明。注入了准确的entitymanager,就可以直接拿来操作数据库了。service层和上面一样的,@transactional(xxxmanager)指明事物管理器即可! 2.采用jdbctemplate方式,直接注入到service层对象即可,so easy!
@autowired private jdbctemplate jdbctemplate; @autowired private transactiontemplate transactiontemplate; @resource(name=jdbctemplate2) private jdbctemplate jdbctemplate2; @resource(name=transactiontemplate2) private transactiontemplate transactiontemplate2; 好了,spring boot 多数据源,完美解决! 而且三种数据库操作方法均支持,包括事物。已经经过实践证明了! 这是官方给出的最佳实践,只是官方文档没写细。导致整整坑了我几天。至此,spring boot框架的使用就告一段落了!





以上就是java之spring boot 1.5.4 配置多数据源的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录