使用Spring Boot时,通过代码而不是属性来定义数据源
通常情况下,在Spring Boot中定义数据源通常是通过配置属性等的方式,但也可以像以前一样通过@Bean进行定义。
spring.datasource.url=jdbc:postgresql://192.168.10.23:5432/testdb
spring.datasource.username=postgres
spring.datasource.password=xxxx
源代码
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<properties>
<java.version>10.0</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
只需创建一个返回 DataSource 的 @Bean 定义,就可以使用它。在这里,我们先使用 PostgreSQL 的 PGSimpleDataSource 进行简单的操作确认。
import javax.sql.DataSource;
import org.postgresql.ds.PGSimpleDataSource;
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.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
@SpringBootApplication
public class App implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(App.class, args).close();
}
@Autowired
JdbcTemplate t;
@Bean
public DataSource dataSource() {
PGSimpleDataSource p = new PGSimpleDataSource();
p.setUrl("jdbc:postgresql://192.168.10.23:5432/testdb");
p.setUser("postgres");
p.setPassword("xxxx");
return p;
}
@Override
public void run(String... args) throws Exception {
t.query("select * from users", (e) -> {
System.out.println(e.getInt("user_id"));
});
}
}
在中国人的母语中,可以通过@ConfigurationProperties作为一种选项来从文件等中读取属性。
my.datasource.postgres.url=jdbc:postgresql://192.168.10.23:5432/testdb
my.datasource.postgres.user=postgres
my.datasource.postgres.password=xxxx
@ConfigurationProperties(prefix = "my.datasource.postgres")
@Bean
public DataSource ds() {
return new PGSimpleDataSource();
}
请提供参考链接
- https://stackoverflow.com/questions/28821521/configure-datasource-programmatically-in-spring-boot