1, SpringBoot 2.2.x의 기본 데이터 소스 사용
당신이 볼 수 SpringBoot의 2.2.x 버전, 데이터 소스는 주사 데이터 소스에 의해, 기본 HikariCP에 의해 사용되며, 완전한 이름을 인쇄 직접 인쇄 할 수 있습니다.
또는 자동으로 구성 할 수있는 소스 코드를보고 찾을 수 있습니다 @SpringBootApplication를 -> @EnableAutoConfiguration은 항아리 패키지 META-INF / spring.factories는 org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration-> 것이 발견 후 JpaRepositoriesAutoConfiguration를 입력 찾을 수있는 위치 당신이 HibernateJpaAutoConfiguration를 구성해야합니다 -> HibernateJpaAutoConfiguration 당신이 구성 DataSourceAutoConfiguration 필요 찾을 입력 한 후 -> DataSourceAutoConfiguration가 발견 SpringBoot 우리를 위해 세 가지 기본 구성을 제공 입력 수입 DataSourcePoolMetadataProvidersConfiguration 구성, 지점을 발견 입력 한 후, 톰캣 제공 JDBC, HikariCP는 아파치 제공 Dbcp2은 메이븐 의존성에 의해 병 패키지를 도입 모양을 사용하여 스프링 부팅 스타터 - 데이터 - 알 수 JPA 소개
하면서 스프링 부팅 스타터 JDBC 참조, 스프링 부팅 스타터 JDBC를 HikariCP, 그래서 기본은 HikariCP입니다.
@Configuration (proxyBeanMethods = 거짓 ) 공용 클래스 DataSourcePoolMetadataProvidersConfiguration { @Configuration (proxyBeanMethods = 거짓 ) @ConditionalOnClass (org.apache.tomcat.jdbc.pool.DataSource. 등급 ) 정적 클래스 TomcatDataSourcePoolMetadataProviderConfiguration { @Bean DataSourcePoolMetadataProvider tomcatPoolDataSourceMetadataProvider () { 창 (는 dataSource) -> { org.apache.tomcat.jdbc.pool.DataSource tomcatDataSource = DataSourceUnwrapper.unwrap (인 dataSource org.apache.tomcat.jdbc.pool.DataSource. 클래스 ); 경우 (! tomcatDataSource = 널 (null) ) { 반환 새 TomcatDataSourcePoolMetadata (tomcatDataSource); } 반환 널 (null)을 ; }; } } @Configuration (proxyBeanMethods = 거짓 ) @ConditionalOnClass (HikariDataSource. 등급 ) 정적 클래스 HikariPoolDataSourceMetadataProviderConfiguration { @Bean DataSourcePoolMetadataProvider hikariPoolDataSourceMetadataProvider () { 창 (는 dataSource) -> { HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap (인 dataSource HikariDataSource. 클래스 ); 경우 (! hikariDataSource = 널 (null) ) { 반환 새 HikariDataSourcePoolMetadata (hikariDataSource); } 반환 널 (null)을 ; }; } } @Configuration (proxyBeanMethods = 거짓 ) @ConditionalOnClass (BasicDataSource의. 클래스) 정적 클래스 CommonsDbcp2PoolDataSourceMetadataProviderConfiguration { @Bean DataSourcePoolMetadataProvider commonsDbcp2PoolDataSourceMetadataProvider () { 창 (는 dataSource) -> { BasicDataSource의 dbcpDataSource = DataSourceUnwrapper.unwrap (인 dataSource BasicDataSource의. 클래스 ); 경우 (! dbcpDataSource = 널 (null) ) { 반환 새 CommonsDbcp2DataSourcePoolMetadata (dbcpDataSource); } 반환 널 (null)을 ; }; } } }
다른 두 개의 연결 풀을 사용하려는 경우, 당신 만 해당 의존성의 치어를 추가해야하며, 등록은 완전한 이름으로 지정 spring.datasource.type 수 있습니다.
제 2 데이터 소스 관련 구성
DataSourceAutoConfiguration 클래스에 우리 @EnableConfigurationProperties (DataSourceProperties.class)는, 당신은 spring.datasource 구성 속성하기 시작하고, 관련 구성 DataSourceProperties 클래스를 알 수 있습니다.
이름 : 데이터 소스의 이름이 포함 된 데이터베이스를 사용하여 기본 이름은 TESTDB입니다.
generateUniqueName : 임의의 데이터 소스 이름을 생성할지 여부를 지정합니다.
유형 : 달성하기 위해 연결 풀의 완전한 이름을 사용하십시오. 기본적으로 자동 클래스 경로에서 감지된다.
driverClassName : JDBC 드라이버의 완전한 이름입니다. 기본적으로 URL을 기반으로 자동 감지.
URL : JDBC 데이터베이스 URL.
이름 : 데이터베이스 로그인 사용자의 이름입니다.
암호 : 암호 데이터베이스.
jndiName : 데이터 소스의 JNDI 위치. 언제 클래스, URL, 사용자 이름과 암호를 무시합니다 설정합니다.
initializationMode는 : DDL 및 DML 스크립트 초기화 데이터 소스를 사용할 때 사용 가능한 기본 내장 데이터베이스를 사용합니다.
플랫폼 : 플랫폼은 DDL 또는 DML 스크립트에 사용되는 (예를 들어, 스키마 - $ {플랫폼} .SQL 또는 데이터 - $ {플랫폼} .SQL) .
스키마 DDL 스크립트 리소스 위치. 이 구성 후, 프로그램을 시작할 때마다 프로그램은 데이터베이스 작업의 구조에 지정된 SQL 파일을 실행합니다.
schemaUsername : 데이터베이스 사용자 이름 DDL 스크립트의 구현입니다.
schemaPassword는 : 데이터베이스 암호는 DDL 스크립트를 실행합니다.
데이터 : DML 스크립트 자원 위치. 이 구성 후, 프로그램을 시작할 때마다 프로그램이 데이터베이스에서 데이터 작업을 SQL 파일을 주어진 실행됩니다.
dataUsername : 데이터베이스 사용자 이름 DML 스크립트의 구현입니다.
dataPassword는 : 데이터베이스 암호는 DML 스크립트를 실행합니다.
continueOnError : 정지 여부, 데이터베이스를 초기화하는 동안 오류가 발생합니다. 거짓 기본
SQL 초기화 스크립트 문 구분 : 구분합니다.
sqlScriptEncoding : SQL 스크립트 코드를.
XA : XA 설정.
3, 봄 부팅은 연결 풀 드루이드에 사용
알리 많은 사용자를 연결 풀링을 드루이드,하지만 또한 매우 사용하기 쉽고도하는 모니터링 기능을 제공합니다. POM을 종속 관계에있는 드루이드 - 스프링 부팅 선발을 추가합니다 . 주요 범주 내에는 DruidDataSourceWrapper 호환 DataSourceProperties 구성을 갖추고, DruidDataSourceAutoConfigure이다. 연결 풀 구성의 기본 구성 DruidDataSource 및 DruidAbstractDataSource에서 볼 수 있습니다.
<의존성> <의 groupId> com.alibaba </의 groupId> <artifactId를> 사제 스프링 부팅 스타트 </ artifactId를> <version>은 $ {사제 스프링 - 부트 starter.version} </ 버전> </ 의존성>
3.1, 보편적 인 연결 풀 구성
#druid 연결 풀 구성 # 초기 접속 크기 spring.datasource.druid.initial -size. 1 = # 연결의 최소 수 spring.datasource.druid.min -idle. 1 = # 최대 연결 spring.datasource.druid.max 능동태 = 20 연결 대기 시간 종료 시각 취득 # spring.datasource.druid.max 잠깐 = 60000 그러한 검출 주파수 간격 # 유휴 연결 밀리 초에서 폐쇄되도록 검출 spring.datasource.druid.time -between 런들을-eviction- = 60000 -millis # 최소 생존 시간 접속 밀리 풀 spring.datasource.druid.min 밀리 -evictable-IDLE 타임 오브 = 300000 오픈 # PSCache 및 지정 각 연결 PSCache의 크기 스프링. datasource.druid.pool -prepared = -statements true로 spring.datasource.druid.max= 20 --of 문 - 준비된 -pool 당 연결 크기 # 초기가있는 경우 - 응용 프로그램 시작 시간이 최대 크기의 많은 수, 속도가 열려 있어야합니다 spring.datasource.druid.async -init =을 true로 필터, 속성 유형 차단 # 모니터 통계 모니터링 사용 통계 필터 : 문자열 별명 확장 모드에 의해 일반적으로 사용되는 플러그 구성된 STAT는, 로그 필터를 사용했을 때의 log4j; SQL 인젝션 방어 필터 : 벽 spring.datasource.druid.filters = STAT
다음과 같이 3.2, 드루이드는 또한 구성, 우리를 위해 모니터링 기능을 제공합니다 :
#druid 모니터 구성 #StatViewServlet 구성 정보, 드루이드 위키를 참조 구성 _StatViewServlet 구성 spring.datasource.druid.stat -보기 - servlet.enabled = true로 # 구성 URL - 액세스 패턴 내장 된 모니터 페이지 spring.datasource.druid.stat = servlet.url 패턴 - 더 -보기 / 드루이드 / * 빈 통계를 허용할지 여부를 # spring.datasource.druid.stat -보기 - servlet.reset에 충실을 활성화 = # 사용자 이름과 암호 spring.datasource.druid.stat -보기 - 사용자 이름 = 드루이드 - servlet.login spring.datasource.druid.stat -보기 - servlet.login - 암호 = 드루이드 # 화이트리스트, 또는 null을 허용하도록 구성되지 않은 경우, 모든 액세스가 허용됩니다 #의 spring.datasource.druid.stat보기 = 127.0.0.1 -servlet.allow # 블랙리스트에있는 경우하면 목록이 거부 될 수있는 경우에도 목록을 거부 할 수 있도록 우선 순위를 거부 spring.datasource.druid.stat-조회 servlet.deny # = 127.0.0.1 # WebStatFilter 구성 정보 사제 위키 참조 _ 구성 WebStatFilter 배치 에 spring.datasource.druid.web 진정한 STAT-filter.enabled = spring.datasource STAT-filter.url -. druid.web 패턴 = / * #는 *의 .js / JS / * 등 불필요한 URL을 제외 spring.datasource.druid.web 스탯-filter.exclusions = *. JS, *. GIF, *. JPG, *. PNG, *. CSS, *. ICO / 드루이드 / * #session 통계 spring.datasource.druid.web-STAT는-filter.session는-STAT는 활성화 = true로 # STAT-filter.session - = spring.datasource.druid.web의 STAT-MAX-COUNT # spring.datasource.druid.web-STAT-filter.principal 세션 - 이름 - = # -stat-spring.datasource.druid.web 쿠키 이름은 -filter.principal = #의 spring.datasource.druid.web-STAT는-filter.profile 활성화 = # 스프링 모니터 구성 정보는 설정 감시 연관된 사제 Github의 위키 및 스프링 구성 _Druid 참조 예 xyzservice 같은 # 스프링 AOP 모니터 엔트리 포인트. *, 콤마 복수의 분리 spring.datasource.druid.aop-패턴 = CN한다. caofanqi.study.studyspringdatajpa.controller. *
구성 후, 프로젝트 방문 시작 에 http : // localhost를 : 8080 / 드루이드 / index.html을 같은 다음과 같습니다 :
3.3, 여러 데이터 소스 구성
구성 파일을있는 application.properties, 연결 풀 구성을 추가합니다.
#数据源1配置 spring.datasource.druid.one.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/study-spring-data-jpa1?characterEncoding=UTF-8&useSSL=false spring.datasource.druid.one.username=root spring.datasource.druid.one.password=root spring.datasource.druid.one.initial-size=1 spring.datasource.druid.one.min-idle=1 spring.datasource.druid.one.max-active=10 spring.datasource.druid.one.max-wait=10000 #数据源2配置 spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/study-spring-data-jpa2?characterEncoding=UTF-8&useSSL=false spring.datasource.druid.two.username=root spring.datasource.druid.two.password=root spring.datasource.druid.two.initial-size=2 spring.datasource.druid.two.min-idle=2 spring.datasource.druid.two.max-active=20 spring.datasource.druid.two.max-wait=20000
JavaConfig配置
/** * 多数据源配置 * @author caofanqi */ @Configuration @Profile("multi-datasource") public class MultiDataSourceConfig { @Primary @Bean(initMethod = "init") @ConfigurationProperties("spring.datasource.druid.one") public DataSource dataSourceOne(){ return DruidDataSourceBuilder.create().build(); } @Bean(initMethod = "init") @ConfigurationProperties("spring.datasource.druid.two") public DataSource dataSourceTwo(){ return DruidDataSourceBuilder.create().build(); } }
测试用例:
/** * 多数据源测试 * @author caofanqi */ @SpringBootTest @ActiveProfiles("multi-datasource") class MultiDataSourceConfigTest { @Resource private DruidDataSource dataSourceOne; @Resource private DruidDataSource dataSourceTwo; @Test void testDataSourceOne(){ assertThat(dataSourceOne.getUrl()).isEqualTo("jdbc:mysql://localhost:3306/study-spring-data-jpa1?characterEncoding=UTF-8&useSSL=false"); assertThat(dataSourceOne.getUsername()).isEqualTo("root"); assertThat(dataSourceOne.getPassword()).isEqualTo("root"); assertThat(dataSourceOne.getDriverClassName()).isEqualTo("com.mysql.jdbc.Driver"); assertThat(dataSourceOne.getInitialSize()).isEqualTo(1); assertThat(dataSourceOne.getMinIdle()).isEqualTo(1); assertThat(dataSourceOne.getMaxActive()).isEqualTo(10); assertThat(dataSourceOne.getMaxWait()).isEqualTo(10000); } @Test void testDataSourceTwo() { assertThat(dataSourceTwo.getUrl()).isEqualTo("jdbc:mysql://localhost:3306/study-spring-data-jpa2?characterEncoding=UTF-8&useSSL=false"); assertThat(dataSourceTwo.getUsername()).isEqualTo("root"); assertThat(dataSourceTwo.getPassword()).isEqualTo("root"); assertThat(dataSourceTwo.getDriverClassName()).isEqualTo("com.mysql.jdbc.Driver"); assertThat(dataSourceTwo.getInitialSize()).isEqualTo(2); assertThat(dataSourceTwo.getMinIdle()).isEqualTo(2); assertThat(dataSourceTwo.getMaxActive()).isEqualTo(20); assertThat(dataSourceTwo.getMaxWait()).isEqualTo(20000); } }
更多druid请看 https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
4、Jpa相关属性配置
主要在JpaProperties和HibernateProperties中。
JpaProperties类:
properties:Jpa提供商的本地属性。
mappingResources:映射资源(相当于persistence.xml中的“Mapping file”)
databasePlatform:要操作的目标数据库的名称,默认情况下自动检测。也可以使用“Database”枚举类设置。
database:要操作的目标数据库,默认情况下自动检测。也可以使用“databasePlatform”属性进行设置。
generateDdl:是否在启动时初始化ddl(根据实体生成表结构),默认不初始化。
showSql:是否打印SQL,默认不显示。
openInView:注册OpenEntityManagerInViewInterceptor。在请求的整个处理过程中将JPA EntityManager绑定到线程。
HibernateProperties类:
naming:命名策略。
ddlAuto:DDL模式。这实际上是“hibernate.hbm2ddl.auto”属性的快捷方式。在使用嵌入式数据库且未检测到架构管理器时,默认为“create-drop”。否则,默认为“none”。
useNewIdGeneratorMappings:是否使用Hibernate新的IdentifierGenerator来实现AUTO、TABLE和SEQUENCE。这实际上是“hibernate.id.new_generator_mappings”属性的快捷方式。未指定时将默认为“true”。
源码地址:https://github.com/caofanqi/study-spring-data-jpa