我正在使用 JDBC 连接器进行 log4j 输出,并希望将日志条目发布到 Postgres 数据库。看起来如下:
<Jdbc name="Jdbc" tableName="log">
<ConnectionFactory class="database.ConnectionFactory" method="getConnection"/>
<Column name="event_date" isEventTimestamp="true" />
<Column name="level" pattern="%level" isUnicode="false" />
<Column name="logger" pattern="%logger" isUnicode="false" />
<Column name="message" pattern="%message" isUnicode="false" />
<Column name="exception" pattern="%ex{full}" isUnicode="false" />
</Jdbc>
据我了解,这需要一个带有方法 getConnection
的静态类,我使用工厂模式实现了它:
public class ConnectionFactory {
private static interface Singleton {
final ConnectionFactory INSTANCE = new ConnectionFactory();
}
private ComboPooledDataSource comboPooledDataSource;
private ConnectionFactory() {
comboPooledDataSource = new ComboPooledDataSource();
try {
// Load the jdbc driver.
comboPooledDataSource.setDriverClass("org.postgresql.Driver");
} catch (PropertyVetoException exception) {
}
// Need to create datasource here, requires parameters.
}
public static Connection getConnection() throws SQLException {
return Singleton.INSTANCE.comboPooledDataSource.getConnection();
}
}
我的问题是,我想通过参数(主机、端口、数据库等)创建与数据库的连接,并且不想对其进行硬编码。另外,拥有一个保存配置的静态类也不是首选,因为我希望能够轻松地对其进行单元测试。
什么是实现这一目标的好解决方案?我是否可能忽略了某些事情或者这是一种不好的做法?
最佳答案
工厂方法可以接受参数。
关于java - 带参数的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191218/