【发布时间】:2019-05-22 07:46:26
【问题描述】:
我正在尝试使用 OSGI 实现某种微服务架构。 我有 UserDAO 包,它从另一个包(连接器)中的连接池获取连接。 它们与 OSGI 服务 API 绑定。所以问题是:
1) 我应该将接口(IConnector) 注册为该接口(Connector) 的服务还是实现:
serviceRegistration = bundleContext.registerService(IConnector.class.getName(), new Connector(), null);
VS
serviceRegistration = bundleContext.registerService(Connector.class.getName(), new Connector(), null);
这两种变体都可以正常工作。如果我注册 IConnector(接口),我只跟踪它:
userDBConnectorTracker = new ServiceTracker(context, IConnector.class.getName(), this);
如果我注册连接器(IConnector 的实现),方法相同:
userDBConnectorTracker = new ServiceTracker(context, Connector.class.getName(), this);
2) 我想使用 DBCP 或 HikariCP,但所有示例都使用没有接口的静态方法,如下所示:
public class HikariCPDataSource {
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
static {
config.setJdbcUrl("jdbc:h2:mem:test");
config.setUsername("user");
config.setPassword("password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
private HikariCPDataSource(){}
}
我已经试过了。但是我也需要将接口的方法更改为静态方法,作为实现方法:
我不能使用这个,因为如果我将我的连接器类的接口注册为服务,它会导致错误“接口中的静态方法是不允许的”。
我应该从连接器类的所有方法中删除静态吗? 为什么每个人都在连接池中使用静态?
【问题讨论】:
标签: java osgi connection-pooling hikaricp apache-commons-dbcp