💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
为了配置自己的`DataSource`,在配置中定义`@Bean`类型.Spring Boot在任何需要的地方重用您的DataSource,包括数据库初始化。 如果需要外部化某些设置,可以将DataSource绑定到环境中. 下例说明如何在bean中定义数据源: ~~~ @Bean @ConfigurationProperties(prefix="app.datasource") public DataSource dataSource() { return new FancyDataSource(); } ~~~ 下面是定义的属性: ~~~ app.datasource.url=jdbc:h2:mem:mydb app.datasource.username=sa app.datasource.pool-size=30 ~~~ 假设您的`FancyDataSource`具有常规的JavaBean属性,url,username和poolSize,这些设置在`DataSource`可供其他组件使用之前自动绑定。 常规数据库初始化也会发生(因此`spring.datasource.*`的相关子集仍可用于您的自定义配置)。 运行应用程序要使用`DataSource`,需要连接信息。 还可以提供特定的连接池设置。 检查将在运行时获取更多实现的详细信息。 下例说明jdbc的数据源配置: ~~~ app.datasource.url=jdbc:mysql://localhost/test app.datasource.username=dbuser app.datasource.password=dbpass app.datasource.pool-size=30 ~~~ Spring Boot还提供了一个名为`DataSourceBuilder`的实用程序构建器类,可用于创建其中一个标准数据源(如果它位于类路径中)。 构建器可以根据类路径上的可用内容检测要使用的那个。 它还会根据JDBC URL自动检测驱动程序。 下例使用`DataSourceBuilder`创建数据源 ~~~ @Bean @ConfigurationProperties("app.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } ~~~ 然而,有一个问题。 由于未公开连接池的实际类型,因此在自定义`DataSource`的元数据中不会生成任何键,并且IDE中没有可用的完成(因为`DataSource`接口不公开任何属性)。 此外,如果你碰巧在类路径上有Hikari,这个基本设置不起作用,因为Hikari没有`url`属性(但是有一个`jdbcUrl`属性)。 在这种情况下,您必须按如下方式重写配置: ~~~ app.datasource.jdbc-url=jdbc:mysql://localhost/test app.datasource.username=dbuser app.datasource.password=dbpass app.datasource.maximum-pool-size=30 ~~~ 您可以通过强制连接池使用专用实现而不是`DataSource`来解决此问题。 您无法在运行时更改实现,但选项列表将是显式的。 下例说明使用`DataSourceBuilder`创建`HikariDataSource` : ~~~ @Bean @ConfigurationProperties("app.datasource") public HikariDataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } ~~~ >由于您的自定义配置选择使用Hikari,因此`app.datasource.type`无效。 在实践中,构建器初始化为您可能在那里设置的任何值,然后通过调用`.type()`来覆盖。