springboot如何配置单数据源
如果要做对应的数据操作,需要配置对应数据源,为了简单演示,这里是H2 内存数据库作为数据源,maven 需要添加如下配置
引入jdbc依赖和h2数据库
org.springframework.boot spring-boot-starter-jdbc
com.h2database h2 runtime
修改application.properties配置文件内容如下
management.endpoints.web.exposure.include=*
spring.output.ansi.enabled=ALWAYSspring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.hikari.maximumPoolSize=5
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.maxLifetime=1800000
接下来编写主启动程序
package jls.spring.data.datasourcedemo;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;@SpringBootApplication
@Slf4j
public class DataSourceDemoApplication implements CommandLineRunner {@Autowiredprivate DataSource dataSource;@Autowiredprivate JdbcTemplate jdbcTemplate;public static void main(String[] args) {SpringApplication.run(DataSourceDemoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {showConnection();showData();}/*** 显示连接信息* @throws SQLException*/private void showConnection() throws SQLException {log.info(dataSource.toString());Connection conn = dataSource.getConnection();log.info(conn.toString());conn.close();}/*** 显示数据*/private void showData() {jdbcTemplate.queryForList("SELECT * FROM FOO").forEach(row -> log.info(row.toString()));}
}
启动之后结果如下

可以看到程序正常启动,且还有结果输出
因为spring boot 2.1.1.RELEASE 启动的时候会自动执行 resource 目录下的data.sql和schema.sql,所以可以看到有数据
浏览器输入 http://localhost:8080/actuator/beans 可以看到
因为pom有
org.springframework.boot spring-boot-starter-actuator
那么Data source等一些实例是如何初始化而来的呢,可以关注如下几个类
配置 DataSource
- DataSourceAutoConfiguration
配置 DataSourceTransactionManager
- DataSourceTransactionManagerAutoConfiguration
配置 JdbcTemplate
- JdbcTemplateAutoConfiguration
以上这些都是需要满足条件时才会进行配置的
数据源的配置属性介绍
- spring.datasource.url=jdbc:h2:mem:testdb
- spring.datasource.username=sa
- spring.datasource.password=
- spring.datasource.driver-class-name=
启动时初始化数据
初始化方式
- spring.datasource.initialization-mode=always|never|embedded
数据表结构
- spring.datasource.schema=
数据
- spring.datasource.data=
数据源平台
- spring.datasource.platform=h2|mysql|oracle
使用Srping 方式配置数据源
项目结构如下:

pom.xml依赖如下
5.1.3.RELEASE
org.springframework spring-context ${spring.version} org.springframework spring-jdbc ${spring.version} org.apache.commons commons-dbcp2 RELEASE com.h2database h2 RELEASE runtime
applicationContext.xml是Spring 的配置文件,内容如下

其中base-package是我们的代码所在的package路径
最后看Application类,为了方便,都写在一起
package jls.spring.data.datasourcedemo;import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Properties;@Configuration
@EnableTransactionManagement
public class DataSourceDemo {@Autowiredprivate DataSource dataSource;public static void main(String[] args) throws SQLException {ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationContext*.xml");showBeans(applicationContext);dataSourceDemo(applicationContext);}@Bean(destroyMethod = "close")public DataSource dataSource() throws Exception {Properties properties = new Properties();properties.setProperty("driverClassName", "org.h2.Driver");properties.setProperty("url", "jdbc:h2:mem:testdb");properties.setProperty("username", "sa");return BasicDataSourceFactory.createDataSource(properties);}@Beanpublic PlatformTransactionManager transactionManager() throws Exception {return new DataSourceTransactionManager(dataSource());}private static void showBeans(ApplicationContext applicationContext) {System.out.println("applicationContext*.xml中定义的Bean:"+Arrays.toString(applicationContext.getBeanDefinitionNames()));}private static void dataSourceDemo(ApplicationContext applicationContext) throws SQLException {DataSourceDemo demo = applicationContext.getBean("dataSourceDemo", DataSourceDemo.class);demo.showDataSource();}public void showDataSource() throws SQLException {System.out.println("dataSource 对象地址:"+dataSource.toString());Connection conn = dataSource.getConnection();System.out.println("dataSource 连接信息:"+conn.toString());conn.close();}
}
运行结果如下:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
