单数据库源配置
结论:首先我们从以下配置中可以看出springboot帮我们完成了以下配置
DataSourceAutoConfiguration
配置 DataSource
DataSourceTransactionManagerAutoConfiguration
配置 DataSourceTransactionManager
JdbcTemplateAutoConfiguration
配置 JdbcTemplate
数据源相关配置属性
通用
-
spring.datasource.url=jdbc:mysql:/localhost/test
-
spring.datasource.username=dbuser
-
spring.datasource.password=dbuser
-
spring.datasource.driver-class-name=com.mysql.jdbc.Driver(可选)
初始化内嵌数据库 -
spring.datasource.initialization-model=embedded|always|never
-
spring.datasource.schema与spring.datasource.data确定初始化SQL文件
-
spring.datasource.platform=hsqldb|h2|oracle|mysql|postgresql
符合条件时才进行配置
1.java配置Bean
package geektime.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.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Properties;
/**
* @ClassName DataSourceDemo
* @Description TODO
* @Author lf
* @Date 2021/9/3 15:21
* @Version 1.0
**/
@Configuration
@EnableTransactionManagement
public class DataSourceDemo {
@Autowired
private 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);
}
private static void showBeans(ApplicationContext applicationContext){
System.out.println(Arrays.toString(applicationContext.getBeanDefinitionNames()));
}
private static void dataSourceDemo(ApplicationContext applicationContext) throws SQLException {
DataSourceDemo demo = applicationContext.getBean("dataSourceDemo", DataSourceDemo.class);
demo.showDataSource();
}
private void showDataSource() throws SQLException{
System.out.println(dataSource.toString());
Connection connection = dataSource.getConnection();
System.out.println(connection.toString());
connection.close();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="geektime.spring.data" />
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!-- <property name="driverClassName" value="org.h2.Driver"/>-->
<!-- <property name="url" value="jdbc:h2:mem:testdb"/>-->
<!-- <property name="username" value="SA"/>-->
<!-- <property name="password" value=""/>-->
<!-- </bean>-->
</beans>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>geektime.spring.data</groupId>
<artifactId>datasource-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<spring.version>5.1.3.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>RELEASE</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
2.XMl配置Bean
package geektime.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.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Properties;
/**
* @ClassName DataSourceDemo
* @Description TODO
* @Author lf
* @Date 2021/9/3 15:21
* @Version 1.0
**/
@Configuration
@EnableTransactionManagement
public class DataSourceDemo {
@Autowired
private 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);
// }
private static void showBeans(ApplicationContext applicationContext){
System.out.println(Arrays.toString(applicationContext.getBeanDefinitionNames()));
}
private static void dataSourceDemo(ApplicationContext applicationContext) throws SQLException {
DataSourceDemo demo = applicationContext.getBean("dataSourceDemo", DataSourceDemo.class);
demo.showDataSource();
}
private void showDataSource() throws SQLException{
System.out.println(dataSource.toString());
Connection connection = dataSource.getConnection();
System.out.println(connection.toString());
connection.close();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="geektime.spring.data" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:testdb"/>
<property name="username" value="SA"/>
<property name="password" value=""/>
</bean>
</beans>