配置數據源springboot


一、數據源的作用

   1 通過DataSource可以獲取數據庫連接Connection

   2 通過DataSource創建JdbcTemplate操作數據庫

    實際項目中,我們在配置數據源的時候會指定數據庫連接池,比如流行的Hikari(spring默認的數據庫連接池)、C3p0、Dbcp2以及阿里巴巴的Druid。應用在操作數據庫的時候,直接從數據庫連接池獲取連接,而不需要每次創建新的連接。至於數據庫連接池的好處,總結就是: 應用創建和銷毀連接的代價是很大的,使用數據庫連接池可以很好的復用連接,節省開銷,方便管理,簡化開發。

 

SpringBoot項目啟動時會自動加載datasourceConfig配置,項目如果需要操作數據庫,就需要配置數據源,如果不需要,則需要處理:

  1.在yml文件配置數據庫信息
  2.排除引入帶有數據庫的包
  3.使用注解啟動類的@EnableAutoConfiguration或@SpringBootApplication中添加exclude = {DataSourceAutoConfiguration.class},排除此類的autoconfig。

   @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

 

二、默認數據源,通過spring-boot-starter-jdbc快速配置數據源

   springboot默認支持4種數據源類型,定義在org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration中,分別是:

  • org.apache.tomcat.jdbc.pool.DataSource     
  • com.zaxxer.hikari.HikariDataSource
  • org.apache.commons.dbcp.BasicDataSource
  • org.apache.commons.dbcp2.BasicDataSource

對於這4種數據源,當classpath下有相應的類存在時,springboot會通過自動配置為其生成DataSource Bean,默認只會生成一個,四種數據源生效的先后順序從上到下。

添加依賴和配置

 在Springboot 使用JDBC可直接添加官方提供的 spring-boot-start-jdbc 或者 spring-boot-start-data-jpa 依賴。

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<dependencies>
		<!-- 添加MySQL依賴 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 添加JDBC依賴 -->
		<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-jdbc</artifactId>                              
	</dependency>

  在核心配置application.properties或者application.yml文件中添加數據源相關配置。 

# application.yml文件中添加如下配置:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testuseUnicode=true&characterEncoding=utf8
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: 123456

  當connector版本是6.0以前的使用com.mysql.jdbc.Driver,6.0以后的使用com.mysql.cj.jdbc.Driver

切換默認數據源

方式一 排除其他的數據源依賴,僅保留需要的數據源依賴; 

方式二 通過在核心配置中通過spring.datasource.type屬性指定數據源的類型; 

方式一

Springboot默認支持的4種數據源Maven依賴如下:

<!-- 添加Tomcat-JDBC依賴 -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jdbc</artifactId>
		</dependency>
		<!-- 添加HikariCP依賴 -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</dependency>
		<!-- 添加DBCP依賴 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
		</dependency>
		<!-- 添加DBCP2依賴 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
		</dependency>

  當我們引入spring-boot-start-jdbc依賴時,其實里面就包含了 Tomcat-JDBC 的依賴,如果想要切換為其他的數據源類型,需要先將Tomcat-JDBC 依賴排除,再添加上需要的數據源的依賴,以使用HikariCP數據源為例,依賴配置如下。

<!-- 添加JDBC依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<exclusions>
				<!-- 排除Tomcat-JDBC依賴 -->
				<exclusion>
					<groupId>org.apache.tomcat</groupId>
					<artifactId>tomcat-jdbc</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- 添加HikariCP依賴 -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</dependency>

  

方式二 

 此外,還可以通過在核心配置中通過添加spring.datasource.type = [數據源類型] 來指定數據源的類型; 

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
# spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
# spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

  

三、第三方數據源,自定義數據源DataSource

如果不想使用Springboot默認支持的4種數據源,還可以選擇使用其他第三方的數據源,例如:Druid、c3p0等。可能有些場景我們不想使用SpringBoot JDBC默認的數據源,需要引入數據庫連接池,然后自定義數據源,指定數據源類型。
以使用Druid數據源為例。 

添加依賴與配置

在pom文件中引入第三方數據源依賴。

         <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<dependencies>
		<!-- 添加MySQL依賴 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 添加JDBC依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!-- 添加Druid依賴 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.6</version>
		</dependency>
	</dependencies>

  核心配置文件中的添加數據源相關配置與使用默認數據源時的配置相同,此處不再重復貼出。  

定義數據源

使用注解@Bean 創建一個DataSource Bean並將其納入到Spring容器中進行管理即可。 

@Configuration
public class DataSourceConfig {
 
	@Autowired
	private Environment env;
 
	@Bean
	public DataSource getDataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl(env.getProperty("spring.datasource.url"));
		dataSource.setUsername(env.getProperty("spring.datasource.username"));
		dataSource.setPassword(env.getProperty("spring.datasource.password"));
		return dataSource;
	}
}

  或

@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class DataSource2Config {
 
	private String url;
	private String username;
	private String password;
 
	@Bean
	public DataSource getDataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl(url);
		dataSource.setUsername(username);// 用戶名
		dataSource.setPassword(password);// 密碼
		return dataSource;
	}
}

 四、springboot配置多數據源一個mysql一個sqlserver

 1、添加依賴

<!--mybatis 模塊-->
        <dependency>
            <groupId>com.bestway</groupId>
            <artifactId>materials-common-mybatis</artifactId>
            <version>1.0</version>
        </dependency>
<!--sqlserver模塊-->
       <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>6.4.0.jre8</version>
            <scope>runtime</scope>
        </dependency>

 2、配置類

MySqlDataSourceConfig

@Configuration
@MapperScan(basePackages = "com.bestway.manager.mapper.mysql", sqlSessionFactoryRef = "MySqlSessionFactory")
public class MySqlDataSourceConfig {
//返回數據庫的數據源 @Bean(name="MySqlDataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource.mysql") public DataSource mysqlDbDataSource(){ return DataSourceBuilder.create().build(); } //返回數據庫的會話工廠 @Primary @Bean(name = "MySqlSessionFactory") public SqlSessionFactory mySqlSessionFactory(@Qualifier("MySqlDataSource") DataSource datasource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); MybatisConfiguration configuration = new MybatisConfiguration(); configuration.addInterceptor(new PaginationInterceptor()); factoryBean.setConfiguration(configuration); factoryBean.setDataSource(datasource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml")); return factoryBean.getObject(); } }

  SqlServerDataSourceConfig

@Configuration
@MapperScan(basePackages = "com.bestway.manager.mapper.sqlserver", sqlSessionFactoryRef = "SqlServerSessionFactory")
public class SqlServerDataSourceConfig {
    @Bean(name="SqlServerDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sqlserver")
    public DataSource sqlServerDbDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "SqlServerSessionFactory")
    public SqlSessionFactory sqlServerSessionFactory(@Qualifier("SqlServerDataSource") DataSource datasource)
            throws Exception {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.addInterceptor(new PaginationInterceptor());
        factoryBean.setConfiguration(configuration);
        factoryBean.setDataSource(datasource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/sqlserver/*.xml"));
        return factoryBean.getObject();
    }
}

3、配置數據源文件

security:
  oauth2:
    client:
      client-id: mine
      client-secret: mine
      scope: server
    ignore:
      urls:
        - /img/**
        - /app-interface/login/checkAccess

# 數據源
spring:
  rabbitmq:
    queuename: mine_subscribe_queue
    exchange: subscribe_ex
    routingkey: subscribe_routkey
    subscribe:
      routingkey: baseinfo_subwl_routkey
      exchange: subscribe_baseinfo_wlex
  datasource:
    mysql:
      type: com.zaxxer.hikari.HikariDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123
      jdbc-url: jdbc:mysql://192.20.1.240:3306/materials-manager?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
      hikari:
        minimum-idle: 5
        maximum-pool-size: 20
        auto-commit: true
        idle-timeout: 30000
        pool-name: MysqlHikariCP
        max-lifetime: 1800000
        connection-timeout: 10000
        connection-test-query: SELECT 1
    sqlserver:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      username: sa
      password: kj111
      jdbc-url: jdbc:sqlserver://192.20.0.248;instanceName=MSSQLSERVER2012;DatabaseName=BW_KJ915
      hikari:
        minimum-idle: 5
        maximum-pool-size: 20
        auto-commit: true
        idle-timeout: 30000
        pool-name: MssqlHikariCP
        max-lifetime: 1800000
        connection-timeout: 10000
        connection-test-query: SELECT 1

# 直接放行URL
ignore:
  urls:
    - /img/**

# 配置mybatis-plus
mybatis-plus:
  # 主要是下面的配置 ,能夠將sql打印在控制台上
  #configuration:
   # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

#0為直通車免審核,1為正常申請
apply:
  type: 1

  

4、創建對應的映射文件

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM