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

1. 目录结构及配置

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

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.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. 配置文件

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)

@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.注解处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.注解处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实体类模板

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层模板

//注意!!必须继承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模板

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接口

import java.util.List;

/**

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

*/

public interface IBaseService<T> {

List<T> list();

}

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

以上是 Springboot2.0配置JPA多数据源连接两个mysql数据库方式 的全部内容, 来源链接: utcz.com/p/249077.html

回到顶部