第一步:創建SpringBoot項目
最終項目目錄結構
Maven依賴
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
application.yml
server:
port: 80
servlet:
context-path: /mds
spring:
datasource:
test1:
driverClassName: com.mysql.cj.jdbc.Driver
# url必須使用jdbc-url的名稱
jdbc-url: jdbc:mysql://localhost:3306/db_test?useSSL=false&serverTimezone=UTC&user=root&password=&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&allowPublicKeyRetrieval=true
password: root
username: root
test2:
driverClassName: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&user=root&password=&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&allowPublicKeyRetrieval=true
password: root
username: root
jpa:
hibernate:
ddl-auto: update #如果再次運行,檢查表是否要更新
properties:
hibernate:
enable_lazy_load_no_trans: true
show-sql: true
database: mysql
open-in-view: false
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
generate-ddl: false
第二步:創建實體類
@Data
@Entity
@Table(name = "tb_dept")
public class Dept {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer deptno;
@Column
private String dname;
@Column
private String loc;
}
第三步:創建Dao
在com.hc.test1.dao包下創建DeptDao1.java
public interface DeptDao1 extends JpaRepository<Dept,Integer> {
}
在com.hc.test1.dao包下創建DeptDao2.java
public interface DeptDao2 extends JpaRepository<Dept,Integer> {
}
第四步:配置數據源
DataSourceConfig
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix="spring.datasource.test1")
public DataSource test1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix="spring.datasource.test2")
public DataSource test2DataSource() {
return DataSourceBuilder.create().build();
}
}
Test1DataSourceConfig
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "test1EntityManagerFactory",
transactionManagerRef = "test1TransactionManager",
basePackages = "com.hc.test1.dao")
public class Test1DataSourceConfig {
@Resource(name = "test1DataSource")
private DataSource dataSource;
@Resource
private JpaProperties jpaProperties;
@Resource
private EntityManagerFactoryBuilder builder;
@Primary
@Bean(name = "test1EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean test1EntityManagerFactoryBean() {
return builder.dataSource(dataSource)
.properties(jpaProperties.getProperties())
.persistenceUnit("test1PersistenceUnit")
.packages("com.hc.bean")
.build();
}
@Primary
@Bean(name = "test1EntityManager")
public EntityManager entityManager() {
return test1EntityManagerFactoryBean().getObject().createEntityManager();
}
@Bean(name = "test1TransactionManager")
public PlatformTransactionManager test1TransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(test1EntityManagerFactoryBean().getObject());
}
}
Test2DataSourceConfig
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "test2EntityManagerFactory",
transactionManagerRef = "test2TransactionManager",
basePackages = "com.hc.test2.dao")
public class Test2DataSourceConfig {
@Resource(name = "test2DataSource")
private DataSource dataSource;
@Resource
private JpaProperties jpaProperties;
@Resource
private EntityManagerFactoryBuilder builder;
@Bean(name = "test2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean test2EntityManagerFactoryBean() {
return builder.dataSource(dataSource)
.properties(jpaProperties.getProperties())
.persistenceUnit("test2PersistenceUnit")
.packages("com.hc.bean")
.build();
}
@Bean(name = "test2EntityManager")
public EntityManager entityManager() {
return test2EntityManagerFactoryBean().getObject().createEntityManager();
}
@Bean(name = "test2TransactionManager")
public PlatformTransactionManager test2TransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(test2EntityManagerFactoryBean().getObject());
}
}
第五步:測試代碼
DeptDaoTest
@SpringBootTest
class DeptDao1Test {
@Resource
private DeptDao1 deptDao1;
@Test
public void fun(){
List<Dept> depts = deptDao1.findAll();
depts.forEach(System.out::println);
}
}
DeptDao2Test
@SpringBootTest
class DeptDao2Test {
@Resource
private DeptDao2 deptDao2;
@Test
public void findAll(){
deptDao2.findAll().forEach(System.out::println);
}
}