在対网站做可能的来自内部和外部的攻击/微信seo排名优化软件
最近项目需要又重新复习了下springboot,关于springboot配置多数据源,做了笔记,分享给有需要的小伙伴们,视频看的动力节点王鹤老师讲的,
动力节点王鹤老师讲解的springboot教程,由浅入深,带你体验Spring Boot的极速开发过程,内容丰富,涵盖了SpringBoot开发的方方面面,并且同步更新到Spring Boot 2.x系列的最新版本。
视频链接:动力节点springboot视频教程-初学springboot必备教程-springboot最新完整版_哔哩哔哩_bilibili你的三连就是录制视频的动力!一定不要忘记收藏、点赞、投币哦~本套视频基于SpringBoot2.4版本讲解。教程从细节入手,每个事例先讲解pom.xml中的重要依赖,其次application配置文件,最后是代码实现。让你知其所以,逐步让掌握SpringBoot框架的自动配置,starter起步依赖等特性。 为什么SpringBoot是创建Spring应用,必须了解spring-boothttps://www.bilibili.com/video/BV1XQ4y1m7ex
一、目录结构
目录结构
二、依赖包(pom.xml)
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version></dependency>
</dependencies>
三、配置文件
server:port: 8080
spring:datasource:first:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/first?useUnicode=true&characterEncoding=utf8&allowMultiQueries=trueusername: rootpassword: rootsecond:driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/second?useUnicode=true&characterEncoding=utf8&allowMultiQueries=trueusername: rootpassword: rootjpa:hibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyimplicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategyshow-sql: truedatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialectdatabase: mysql
四、多数据源配置(jpa)
1. DataSourceConfiguration
package com.cetc.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** 数据库配置*/
@Configuration
public class DataSourceConfiguration {/*** 第一个数据连接,默认优先级最高* @return*/@Bean(name = "dataSourceFirst")@Primary@ConfigurationProperties(prefix = "spring.datasource.first")public DataSource dataSourceFirst() {//这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置return DataSourceBuilder.create().build();}/*** 第二个数据源* @return*/@Bean(name = "dataSourceSecond")@ConfigurationProperties(prefix = "spring.datasource.second")public DataSource dataSourceSecond() {return DataSourceBuilder.create().build();}
}
说明:其实这里配置已经完成了,这里就配置了两个数据源了。可以加入对应的JdbcTemplate,这里不做介绍,比较简单
2. JpaFirstConfiguration
package com.cetc.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
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.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;
import javax.sql.DataSource;/*** 第一个数据源,jpa的相关配置*/
@Configuration
@EntityScan(basePackages = "com.cetc.domain.first")
//1、实体扫描
//2、实体管理ref
//3、事务管理
@EnableJpaRepositories(basePackages = "com.cetc.repository.first",entityManagerFactoryRef = "firstEntityManagerFactoryBean",transactionManagerRef = "firstTransactionManager")
@EnableTransactionManagement
public class JpaFirstConfiguration {//第一个数据源,可以不加Qualifier@Autowired@Qualifier("dataSourceFirst")private DataSource dataSource;//jpa其他参数配置@Autowiredprivate JpaProperties jpaProperties;//实体管理工厂builder@Autowiredprivate EntityManagerFactoryBuilder factoryBuilder;/*** 配置第一个实体管理工厂的bean* @return*/@Bean(name = "firstEntityManagerFactoryBean")@Primarypublic LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {return factoryBuilder.dataSource(dataSource)//这一行的目的是加入jpa的其他配置参数比如(ddl-auto: update等)//当然这个参数配置可以在事务配置的时候也可以.properties(jpaProperties.getHibernateProperties(new HibernateSettings())).packages("com.cetc.domain.first").persistenceUnit("firstPersistenceUnit").build();}/*** EntityManager不过解释,用过jpa的应该都了解* @return*/@Bean(name = "firstEntityManager")@Primarypublic EntityManager entityManager() {return entityManagerFactoryBean().getObject().createEntityManager();}/*** jpa事务管理* @return*/@Bean(name = "firstTransactionManager")@Primarypublic JpaTransactionManager transactionManager() {JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());return jpaTransactionManager;}
}
3. JpaSecondConfiguration
package com.cetc.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
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.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;
import javax.sql.DataSource;/*** 第二个数据源,jpa的相关配置*/
@Configuration
@EntityScan(basePackages = "com.cetc.domain.second")
//1、实体扫描
//2、实体管理ref
//3、事务管理
@EnableJpaRepositories(basePackages = "com.cetc.repository.second",entityManagerFactoryRef = "secondEntityManagerFactoryBean",transactionManagerRef = "secondTransactionManager")
@EnableTransactionManagement
public class JpaSecondConfiguration {//第二个数据源,必须加Qualifier@Autowired@Qualifier("dataSourceSecond")private DataSource dataSource;//jpa其他参数配置@Autowiredprivate JpaProperties jpaProperties;//实体管理工厂builder@Autowiredprivate EntityManagerFactoryBuilder factoryBuilder;/*** 配置第二个实体管理工厂的bean* @return*/@Bean(name = "secondEntityManagerFactoryBean")public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {return factoryBuilder.dataSource(dataSource).properties(jpaProperties.getHibernateProperties(new HibernateSettings())).packages("com.cetc.domain.second").persistenceUnit("secondPersistenceUnit").build();}/*** EntityManager不过解释,用过jpa的应该都了解* @return*/@Bean(name = "secondEntityManager")public EntityManager entityManager() {return entityManagerFactoryBean().getObject().createEntityManager();}/*** jpa事务管理* @return*/@Bean(name = "secondTransactionManager")public JpaTransactionManager transactionManager() {JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());return jpaTransactionManager;}
}