具有@value属性的连接类

时间:2018-05-24 12:35:09

标签: java sql spring-boot jooq

我是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;
 }

1 个答案:

答案 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);
    }
}