一、加依赖
<?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>cn.edu.tju</groupId>
<artifactId>springbootjpa</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
</dependencies>
</project>
二、创建实体类
package cn.edu.tju.domain.four;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
public class StudentInfo {
@Id
int id;
String name;
int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package cn.edu.tju.domain.three;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class TeacherInfo {
@Id
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
三、创建repository类
package cn.edu.tju.repository.four;
import cn.edu.tju.domain.four.StudentInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import cn.edu.tju.domain.three.TeacherInfo;
import org.springframework.stereotype.Repository;
public interface StudentInfoRepository extends JpaRepository<StudentInfo,Integer>
{
StudentInfo findByName(String name);
}
package cn.edu.tju.repository.three;
import org.springframework.data.jpa.repository.JpaRepository;
import cn.edu.tju.domain.three.TeacherInfo;
public interface TeacherInfoRepository extends JpaRepository<TeacherInfo,Integer>
{
TeacherInfo findByName(String name);
}
四、创建repository配置类:
package cn.edu.tju.config;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import cn.edu.tju.domain.three.TeacherInfo;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
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.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.util.StringUtils;
@Configuration
@EnableJpaRepositories(
basePackages = {"cn.edu.tju.repository.three"},//
entityManagerFactoryRef = "firstEntityManagerFactory")//
public class MyEntityManagerFactoryConfiguration {
@Bean("firstDataSource")
@Primary
@ConfigurationProperties("app.jpa.first")
public DataSource firstDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean("firstEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean firstEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("firstDataSource")DataSource firstDataSource) {
return
builder.dataSource(firstDataSource).packages("cn.edu.tju.domain.three").persistenceUnit("firstDs").build();
}
}
package cn.edu.tju.config;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import cn.edu.tju.domain.three.TeacherInfo;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
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.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.util.StringUtils;
@Configuration
@EnableJpaRepositories(
basePackages = {"cn.edu.tju.repository.four"},
entityManagerFactoryRef = "secondEntityManagerFactory")
public class MyEntityManagerFactoryConfiguration2 {
@Bean("secondDataSource")
//@Primary
@ConfigurationProperties("app.jpa.second")
public DataSource firstDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean("secondEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("secondDataSource")DataSource secondDataSource) {
return
builder.dataSource(secondDataSource).packages("cn.edu.tju.domain.four").persistenceUnit("secondDs").build();
}
}
五、在application.properties中配置数据源
server.port=9024
spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.master.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?serverTimezone=Asia/Shanghai&logger=Slf4JLogger&profileSQL=true
spring.datasource.master.username=root
spring.datasource.master.password=MyPass
spring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.slave.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/appbyte?serverTimezone=Asia/Shanghai&logger=Slf4JLogger&profileSQL=true
spring.datasource.slave.username=root
spring.datasource.slave.password=MyPass
六、在controller中注入并使用repository
package cn.edu.tju.controller;
import cn.edu.tju.domain.four.StudentInfo;
import cn.edu.tju.domain.three.TeacherInfo;
import cn.edu.tju.repository.four.StudentInfoRepository;
import cn.edu.tju.repository.three.TeacherInfoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@Autowired
private TeacherInfoRepository teacherInfoRepository;
@Autowired
private StudentInfoRepository studentInfoRepository;
@RequestMapping("/hello")
public String hello(){
TeacherInfo result = teacherInfoRepository.findByName("amadeusliu33");
return result.getName()+" "+result.getAge();
}
@RequestMapping("/hi")
public String hi(){
StudentInfo result = studentInfoRepository.findByName("amadeusliu33");
return result.getName()+" "+result.getAge();
}
}
七、在数据库中建表并插入数据。
八、创建启动类,启动并测试接口