如何为数据库连接创建不同的 class
How to make different class for DB connections
我正在开发一个 spring 引导应用程序,我需要一个通用的 class 来为我提供所有控制器的数据库连接所以我创建了一个单独的 class 如下:
@RestController
public class DataBaseConnector{
@Autowired
@Qualifier("dataSource")
public static DataSource dataSource;
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.ds")
public DataSource DataSourcePGStreet() {
return DataSourceBuilder.create().build();
}
@Autowired
public Connection giveConnection() throws SQLException{
return dataSource.getConnection();
}
}
然后在另一个控制器中我调用连接如下:
@Autowired
@Qualifier("dbc")
private static DataBaseConnector obj;
@Autowired
private Connection connectionDatabase;
.../// Rest Code
@RequestMapping(value="/path",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<?> getStreetScore(){
obj=new DataBaseConnector();
connectionDatabase=obj.giveConnection();
}
但这会给我一个
的错误
感谢 DataBaseConnector.Any 帮助创建名称时出错
完整堆栈跟踪
描述:
Field dataSource in com.dmmltasmu.controller.DataBaseConnector required a bean of type 'javax.sql.DataSource' that could not be found.
- Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
- Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required classes 'javax.transaction.TransactionManager', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
您不能自动装配静态字段。丑但是如果你想尝试下面的一个
@Component
public class AnotherController {
private static DataBaseConnectionProvider obj;
@Autowired
public void setDataBaseConnectionProvider(DataBaseConnectionProvider obj) {
AnotherController.obj = obj;
}}
您使用静态
@Autowired
@Qualifier("dataSource")
public static DataSource dataSource;
Spring 无法自动装配 static
。删除 static
您可以尝试通过方法自动装配并分配给静态,但这是糟糕的方法。
中相同
@Autowired
@Qualifier("dbc")
private static DataBaseConnector obj;
去除静电。
BTW java 命名约定假定方法名称从小写字母开始。更正
DataSourcePGStreet
不要尝试注入 Connection
这会导致错误和难以调试的问题。只需使用 JdbcTemplate
进行 JDBC 访问不会让您的生活更艰难。
旁边 @Autowired
上的 static
字段将不起作用,您只能注入非 static
字段。
假设您已经相应地配置了您的 spring.datasource
属性(如果没有将您的 spring.ds
属性重命名为 spring.datasource
)这样 Spring 将自动配置一个 DataSource
和 JdbcTemplate
.
从您的代码来看,只需删除您的 DataBaseConnector
。
要使用 JdbcTemplate
只需注入它。
@Autowired
private JdbcTemplate jdbc;
@RequestMapping(value="/path",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<?> getStreetScore(){
Obj result = jdbc.queryForObject(<your-query>, new RowMapper() { ... });
return ResponseEntity.ok(result);
}
或者您的实施是什么。
我正在开发一个 spring 引导应用程序,我需要一个通用的 class 来为我提供所有控制器的数据库连接所以我创建了一个单独的 class 如下:
@RestController
public class DataBaseConnector{
@Autowired
@Qualifier("dataSource")
public static DataSource dataSource;
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.ds")
public DataSource DataSourcePGStreet() {
return DataSourceBuilder.create().build();
}
@Autowired
public Connection giveConnection() throws SQLException{
return dataSource.getConnection();
}
}
然后在另一个控制器中我调用连接如下:
@Autowired
@Qualifier("dbc")
private static DataBaseConnector obj;
@Autowired
private Connection connectionDatabase;
.../// Rest Code
@RequestMapping(value="/path",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<?> getStreetScore(){
obj=new DataBaseConnector();
connectionDatabase=obj.giveConnection();
}
但这会给我一个
的错误感谢 DataBaseConnector.Any 帮助创建名称时出错
完整堆栈跟踪
描述:
Field dataSource in com.dmmltasmu.controller.DataBaseConnector required a bean of type 'javax.sql.DataSource' that could not be found.
- Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
- Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required classes 'javax.transaction.TransactionManager', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
您不能自动装配静态字段。丑但是如果你想尝试下面的一个
@Component
public class AnotherController {
private static DataBaseConnectionProvider obj;
@Autowired
public void setDataBaseConnectionProvider(DataBaseConnectionProvider obj) {
AnotherController.obj = obj;
}}
您使用静态
@Autowired
@Qualifier("dataSource")
public static DataSource dataSource;
Spring 无法自动装配 static
。删除 static
您可以尝试通过方法自动装配并分配给静态,但这是糟糕的方法。
中相同@Autowired
@Qualifier("dbc")
private static DataBaseConnector obj;
去除静电。
BTW java 命名约定假定方法名称从小写字母开始。更正
DataSourcePGStreet
不要尝试注入 Connection
这会导致错误和难以调试的问题。只需使用 JdbcTemplate
进行 JDBC 访问不会让您的生活更艰难。
旁边 @Autowired
上的 static
字段将不起作用,您只能注入非 static
字段。
假设您已经相应地配置了您的 spring.datasource
属性(如果没有将您的 spring.ds
属性重命名为 spring.datasource
)这样 Spring 将自动配置一个 DataSource
和 JdbcTemplate
.
从您的代码来看,只需删除您的 DataBaseConnector
。
要使用 JdbcTemplate
只需注入它。
@Autowired
private JdbcTemplate jdbc;
@RequestMapping(value="/path",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<?> getStreetScore(){
Obj result = jdbc.queryForObject(<your-query>, new RowMapper() { ... });
return ResponseEntity.ok(result);
}
或者您的实施是什么。