1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.enableautoconfiguration; import org.springframework.boot.builder.springapplicationbuilder; import org.springframework.boot.context.web.springbootservletinitializer; import org.springframework.context.annotation.componentscan; @componentscan @enableautoconfiguration //@enablejparepositories(basepackages = "com.sonychina.backend.repository") public class application extends springbootservletinitializer { public static void main(string[] args) { springapplication app = new springapplication(application. class ); app.run(args); //springapplication.run(application.class, args); } @override protected springapplicationbuilder configure(springapplicationbuilder application) { return application.sources(application. class ); } } |
2.双数据源配置类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import java.util.map; import javax.sql.datasource; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.autoconfigure.jdbc.datasourcebuilder; import org.springframework.boot.autoconfigure.orm.jpa.entitymanagerfactorybuilder; import org.springframework.boot.autoconfigure.orm.jpa.jpaproperties; 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.data.jpa.repository.config.enablejparepositories; import org.springframework.orm.jpa.localcontainerentitymanagerfactorybean; import com.test.entity.statistic.sysuser; import com.test.repository.system.systemrepository; @configuration @enablejparepositories (entitymanagerfactoryref= "entitymanagerfactoryprimary" , basepackageclasses= {systemrepository. class }) public class globaldataconfiguration { // @autowired // private dbconfig dbconfig; @autowired private jpaproperties jpaproperties; @bean (name= "primarydatasource" ) @primary @configurationproperties (prefix= "datasource.primary" ) public datasource primarydatasource() { system.out.println( "-------------------- primarydatasource init ---------------------" ); return datasourcebuilder.create().build(); } @bean (name= "secondarydatasource" ) @configurationproperties (prefix= "datasource.secondary" ) public datasource secondarydatasource() { system.out.println( "-------------------- secondarydatasource init ---------------------" ); // datasourcebuilder factory = datasourcebuilder // .create(dbconfig.class.getclassloader()) // .driverclassname(dbconfig.getdriver()) // .url(dbconfig.geturl()) // .username(dbconfig.getuser()) // .password(dbconfig.getpassword()); // return factory.build(); return datasourcebuilder.create().build(); } // @bean(name = "entitymanagerprimary") // @primary // public entitymanager entitymanager(entitymanagerfactorybuilder builder) { // return customerentitymanagerfactory(builder).getobject().createentitymanager(); // } @bean (name= "entitymanagerfactoryprimary" ) @primary public localcontainerentitymanagerfactorybean customerentitymanagerfactory(entitymanagerfactorybuilder builder) { return builder.datasource(primarydatasource()) .properties(getvendorproperties(primarydatasource())) .packages(sysuser. class ) .persistenceunit( "system" ) .build(); } private map<string, string> getvendorproperties(datasource datasource) { return jpaproperties.gethibernateproperties(datasource); } } |
3.第二个jpa实体管理器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.map; import javax.sql.datasource; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import org.springframework.boot.autoconfigure.orm.jpa.entitymanagerfactorybuilder; import org.springframework.boot.autoconfigure.orm.jpa.jpaproperties; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.jpa.repository.config.enablejparepositories; import org.springframework.orm.jpa.jpatransactionmanager; import org.springframework.orm.jpa.localcontainerentitymanagerfactorybean; import org.springframework.transaction.platformtransactionmanager; import org.springframework.transaction.annotation.enabletransactionmanagement; import com.test.entity.manage.banner; import com.test.repository.manage.bannerrepository; @configuration @enabletransactionmanagement @enablejparepositories (entitymanagerfactoryref= "entitymanagerfactorysecondary" , transactionmanagerref= "transactionmanagersecondary" , basepackageclasses= {bannerrepository. class }) public class secondemfbconfig { @autowired private jpaproperties jpaproperties; @autowired @qualifier ( "secondarydatasource" ) private datasource datasource; // @bean(name = "entitymanagerprimary") // @primary // public entitymanager entitymanager(entitymanagerfactorybuilder builder) { // return customerentitymanagerfactory(builder).getobject().createentitymanager(); // } @bean (name= "entitymanagerfactorysecondary" ) public localcontainerentitymanagerfactorybean customerentitymanagerfactory(entitymanagerfactorybuilder builder) { return builder.datasource(datasource) .properties(getvendorproperties(datasource)) .packages(banner. class ) .persistenceunit( "customers" ) .build(); } private map<string, string> getvendorproperties(datasource datasource) { return jpaproperties.gethibernateproperties(datasource); } @bean (name = "transactionmanagersecondary" ) platformtransactionmanager transactionmanagersecondary(entitymanagerfactorybuilder builder) { return new jpatransactionmanager(customerentitymanagerfactory(builder).getobject()); } } |
4.repository类举例
1
2
3
4
5
6
7
8
9
|
import org.springframework.data.jpa.repository.jparepository; import org.springframework.data.jpa.repository.modifying; import org.springframework.data.jpa.repository.query; import com.test.entity.manage.banner; public interface bannerrepository extends jparepository<banner, long > { @modifying @query ( "update banner m set m.name=1 where m.id=2" ) public void update(string bannername, long id); } |
1.5.注意:对@primary修饰的localcontainerentitymanagerfactorybean可以不用指定transactionmanager,spring上下文自动使用默认的jpatransactionmanager,但是对于第二个或第三个等等必须指定transactionmanager。可以参考springboot官方文档中的相关章节。
总结
以上所述是小编给大家介绍的spring boot springjpa 支持多个数据源的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://blog.csdn.net/ba5189tsl/article/details/47341425