我是Spring
的初学者,我正在使用spring-boot
开展Jooq
项目。
我创建了一个应用程序属性 加载数据库访问设置, 它正在工作,但我需要一个连接类,它返回一个连接对象供我在需要时使用。
如果此类有static
getConnection
方法,那会更好。我把课程写成@Component
,我把我的
@Value
但是当我尝试使用它们时,所有这些属性都是null
。
还有其他办法吗? 非常感谢你。
@Component
public class ConnectionFactory {
@Value("${bws.codigo.escola}")
static private String codigoEscola;
@Value("${bws.driver.connection}")
static private String driver;
@Value("${bws.database.name}")
static private String nameDb;
@Value("${bws.database.user}")
static private String user;
@Value("${bws.database.password}")
static private String password;
@Value("${bws.database.server}")
static private String server;
@Value("${bws.string.connection}")
static private String firstUrlPart;
@Value("${bws.string.connectionLast}")
static private String lastPartUrl;
@Value("${bws.database.port}")
static private String port;
static String strConnection = firstUrlPart+server+":"+port+"/"+nameDb+lastPartUrl;
public static Connection getConnection() throws SQLException {
try {
Class.forName(driver);
return DriverManager.getConnection(strConnection,
user,password);
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
}
我会在其他类中使用它
try (Connection con = ConnectionFactory.getConnection()) {
DSLContext ctx = DSL.using(con, SQLDialect.MYSQL);
int count = ctx.selectCount()
.from(ALUNO)
.fetchOne(0, int.class);
return count;
}
答案 0 :(得分:0)
当然,您可以继续为特定的每个查询注入创建JDBC连接所需的所有值。或者,更好的是,您注入一个预先配置的DSLContext
单例实例,该实例通过DataSource
包装JDBC连接(理想情况下由连接池实现)。
Spring Boot手册说明了如何做到这一点: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-jooq
这里可以看到更完整的例子: https://github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/jOOQ-spring-boot-example
目标是:
class SomeClass {
@Autowired
DSLContext ctx;
public int countAluno() {
return ctx.selectCount()
.from(ALUNO)
.fetchOne(0, int.class);
}
}