SpringBoot 提供了一套自动扫描数据源的的算法,使得我们即使不配置数据源,也可以获得一个默认的数据源(通常是HikariCP、Apache Tomcat或Commons DBCP,取决于类路径下有哪个具体的实现),那么我们如何自定义一个数据源呢?
.
第一步:在springboot 初始环境下,引入依赖( 为了演示方便,我们直接用基于内存的关系型数据库h2 ,这样我们可以免去安装mysql的工作,如果要用mysql,则需要将h2 替换成对应的数据库驱动)
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>runtime</scope>
</dependency>
第二步:编写配置文件,改变springboot的默认行为,使用我们自己的数据源 h2
@Configuration
public classDataSourceConfig{
@Bean
public DataSource getDataSource(){
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.h2.Driver");
dataSourceBuilder.url("jdbc:h2:mem:test");
dataSourceBuilder.username("SA");
dataSourceBuilder.password("");
return dataSourceBuilder.build();
}
}
我们使用 DataSourceBuilder 可以更方便的创建数据源,很多默认值已经配置好,只需要传几个核心的参数就能创建好我们自定义的数据源。
第三步:上面两步就配置好了,下面我们来测试一下
创建一个基本的User 实体
@Entity
@Table(name = "users")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String email;
// 这里自行把get、set,toString 方法加上
}
第四步:创建一个Repository 类来对数据进行操作
@Repository
public interface UserRepository extends CrudRepository<User, Long> {}
第五步:运行主类
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run( Application.class, args );
}
@Bean
public CommandLineRunner run(UserRepository userRepository) throws Exception {
return (String[] args) -> {
User user1=new User( "zhangsan", "zhangsan@email.com" );
User user2=new User( "lisi", "lisi@email.com" );
userRepository.save( user1 );
userRepository.save( user2 );
userRepository.findAll().forEach( user -> System.out.println( user ) );
};
}
}
第六步:结果如图所示,正常输出