好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Springboot2.0配置JPA多数据源连接两个mysql数据库方式

1. 目录结构及配置

pom.xml(不要乱放太多,会引起jar冲突,亲身体验)

?

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

<? xml version = "1.0" encoding = "UTF-8" ?>

< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://HdhCmsTestw3.org/2001/XMLSchema-instance"

     xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >

     < modelVersion >4.0.0</ modelVersion >

     < groupId >com.luoshupeng</ groupId >

     < artifactId >multidatasource</ artifactId >

     < version >0.0.1-SNAPSHOT</ version >

     < packaging >jar</ packaging >

     < name >SpringBoot2-MultiDataSource</ name >

     < description >Spring Boot 2.0 多数据源练习程序</ description >

     < parent >

         < groupId >org.springframework.boot</ groupId >

         < artifactId >spring-boot-starter-parent</ artifactId >

         < version >2.0.0.RELEASE</ version >

         < relativePath /> <!-- lookup parent from repository -->

     </ parent >

     < properties >

         < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding >

         < project.reporting.outputEncoding >UTF-8</ project.reporting.outputEncoding >

         < java.version >1.8</ java.version >

     </ properties >

     < dependencies >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-data-jpa</ artifactId >

         </ dependency >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-web</ artifactId >

         </ dependency >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-devtools</ artifactId >

             < scope >runtime</ scope >

         </ dependency >

         < dependency >

             < groupId >mysql</ groupId >

             < artifactId >mysql-connector-java</ artifactId >

             < scope >runtime</ scope >

         </ dependency >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-test</ artifactId >

             < scope >test</ scope >

         </ dependency >

     </ dependencies >

     < build >

         < plugins >

             < plugin >

                 < groupId >org.springframework.boot</ groupId >

                 < artifactId >spring-boot-maven-plugin</ artifactId >

             </ plugin >

         </ plugins >

     </ build >

</ project >

2. 配置文件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

server.port= 8080

##\u7B2C\u4E00\u79CD\u65B9\u6CD5

spring.datasource.primary.name=primaryDB

spring.datasource.primary.url=jdbc:mysql: //localhost:3306/shiro?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true

spring.datasource.primary.username=root

spring.datasource.primary.password=

spring.datasource.primary.driver- class -name=com.mysql.jdbc.Driver

##\u7B2C\u4E8C\u79CD\u65B9\u6CD5

spring.datasource.secondary.name=secondaryDB

#spring.datasource.secondary.url=jdbc:h2:mem:test-db2

spring.datasource.secondary.jdbc-url=jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true

spring.datasource.secondary.username=root

spring.datasource.secondary.password=

spring.datasource.secondary.driver- class -name=com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto=create-drop

spring.jpa.show-sql= true

spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

3. DataSourceConfigurer类

(两种方法,取任何一种都可以,此程序中两种都有demo)

?

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

@Configuration

public class DataSourceConfigurer {

     /**

      * 第一种方法

      * @return

      */

     @Primary

     @Bean (name = "primaryDataSourceProperties" )

     @ConfigurationProperties (prefix = "spring.datasource.primary" )

     public DataSourceProperties primaryDataSourceProperties() {

         return new DataSourceProperties();

     }

     @Primary

     @Bean (name = "primaryDataSource" )

     @ConfigurationProperties (prefix = "spring.datasource.primary" )

     public DataSource primaryDataSource() {

         return primaryDataSourceProperties().initializeDataSourceBuilder().build();

     }

     /**

      * 第二种方法

      * @return

      */

     @Bean (name = "secondaryDataSource" )

     @ConfigurationProperties (prefix = "spring.datasource.secondary" )

     public DataSource secondaryDataSource() {

         return DataSourceBuilder.create().build();

     }

}

4. 主数据源配置

?

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

(需要改两处, 1 .注解处basePackages=[****] //此处对应程序dao层 全路径包名,2. LocalContainerEntityManagerFactoryBean方法下的.packeages([***])//pojo类全类名)

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories (

         entityManagerFactoryRef = "entityManagerFactoryPrimary" ,

         transactionManagerRef = "transactionManagerPrimary" ,

         basePackages = { "com.luoshupeng.multidatasource.primary" })

public class PrimaryConfigurer {

     @Resource (name = "primaryDataSource" )

     private DataSource primaryDataSource;

     @Autowired

     private JpaProperties jpaProperties;

     private Map<String, Object> getVendorProperties() {

         return jpaProperties.getHibernateProperties( new HibernateSettings());

     }

     @Primary

     @Bean (name = "entityManagerFactoryPrimary" )

     public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) {

         return builder.dataSource(primaryDataSource).properties(getVendorProperties())

                 .packages( "com.luoshupeng.multidatasource.primary" ).persistenceUnit( "primaryPersistenceUnit" )

                 .build();

     }

     @Primary

     @Bean (name = "entityManagerPrimary" )

     public EntityManager entityManager(EntityManagerFactoryBuilder builder) {

         return entityManagerFactoryPrimary(builder).getObject().createEntityManager();

     }

     @Primary

     @Bean (name = "transactionManagerPrimary" )

     public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {

         return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());

     }

}

5. 从数据源配置

?

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

(需要改两处, 1 .注解处basePackages=[****] //此处对应程序dao层 全路径包名,2. LocalContainerEntityManagerFactoryBean方法下的.packeages([***])//pojo类全类名)

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories (

         transactionManagerRef = "transactionManagerSecondary" ,

         entityManagerFactoryRef = "entityManagerFactorySecondary" ,

         basePackages = { "com.luoshupeng.multidatasource.secondary.repository" })

public class SecondaryConfigurer {

     //@Resource(name = "secondaryDataSource")

     @Autowired

     @Qualifier (value = "secondaryDataSource" )

     private DataSource secondaryDataSource;

     @Autowired

     private JpaProperties jpaProperties;

     private Map<String, Object> getVendorProperties() {

         return jpaProperties.getHibernateProperties( new HibernateSettings());

     }

     @Bean (name = "entityManagerFactorySecondary" )

     public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder builder) {

         return builder.dataSource(secondaryDataSource).properties(getVendorProperties())

                 .packages( "com.luoshupeng.multidatasource.secondary.repository" ).persistenceUnit( "secondaryPersistenceUnit" )

                 .build();

     }

     @Bean (name = "entityManagerSecondary" )

     public EntityManager entityManager(EntityManagerFactoryBuilder builder) {

         return entityManagerFactorySecondary(builder).getObject().createEntityManager();

     }

     @Bean (name = "transactionManagerSecondary" )

     public PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {

         return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());

     }

}

6.User实体类模板

?

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

package com.luoshupeng.multidatasource.primary.entity;

import javax.persistence.*;

/**

  * Created by luoshupeng on 2018-03-20 10:01

  */

@Entity

@Table (name = "user" )

public class User {

     @Id

     @GeneratedValue (strategy = GenerationType.IDENTITY)

     private Integer id;

     private String name;

     private Integer age;

     public User() {

     }

     public User(String name, Integer age) {

         this .name = name;

         this .age = age;

     }

     public Integer getId() {

         return id;

     }

     public void setId(Integer id) {

         this .id = id;

     }

     public String getName() {

         return name;

     }

     public void setName(String name) {

         this .name = name;

     }

     public Integer getAge() {

         return age;

     }

     public void setAge(Integer age) {

         this .age = age;

     }

     @Override

     public String toString() {

         return "User{" +

                 "id=" + id +

                 ", name='" + name + '\ '' +

                 ", age=" + age +

                 '}' ;

     }

}

7.dao层模板

?

1

2

3

4

5

6

7

8

9

10

//注意!!必须继承JpaRepository

import com.luoshupeng.multidatasource.primary.entity.User;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**

  * Created by luoshupeng on 2018-03-20 10:22

  */

public interface UserRepository extends JpaRepository<User, Integer> {

   List<User> findAll();

}

8.service模板

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import com.luoshupeng.multidatasource.primary.entity.User;

import com.luoshupeng.multidatasource.primary.repository.UserRepository;

import com.luoshupeng.multidatasource.baseservice.IBaseService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

/**

  * Created by luoshupeng on 2018-03-20 10:26

  */

@Service

public class UserService implements IBaseService<User> {

     @Autowired

     UserRepository userRepository;

     @Override

     public List<User> list() {

         return userRepository.findAll();

     }

}

9.IBaseService接口

?

1

2

3

4

5

6

7

import java.util.List;

/**

  * Created by luoshupeng on 2018-03-20 10:25

  */

public interface IBaseService<T> {

     List<T> list();

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://HdhCmsTestcnblogs测试数据/yuyangcoder/p/11573229.html

查看更多关于Springboot2.0配置JPA多数据源连接两个mysql数据库方式的详细内容...

  阅读:30次