gpt4 book ai didi

java - 不同类之间共享对象

转载 作者:行者123 更新时间:2023-11-30 02:25:14 27 4
gpt4 key购买 nike

我需要一些“设计”建议。我有静态 JDBC 对象和我的“主入口类”,它们在其他类之间共享。

我的MainClass看起来像这样:

public static Jdbc db1;
public static Jdbc db2;

connectDb(makeDirectConnection) // depending on runtime passed argument

public static connectDb(boolean makeDirectConnection) {
if(makeDirectConnection) // use direct connection
db1 = JdbcFactory.getInstance("db/config/main/db1.properties");
db2 = JdbcFactory.getInstance("db/config/main/db2.properties");
} else { // connect using via SSH tunnel (different host and port)
db1 = JdbcFactory.getInstance("db/config/tunnel/db1.properties");
db2 = JdbcFactory.getInstance("db/config/tunnel/db2.properties");
}

JdbcFactory 维护实例的Map

它工作正常,但如果我想对正在使用 db1db2 的类进行单元测试,如果我不进行单元测试,我会得到空指针异常不执行MainClass.dbConnect()

让事情变得更糟 - 从测试类我什至需要一个不同的数据库设置,所以从 Test.class 我这样做:

Main.db1 = JdbcFactory.getInstance("db/config/test/db1.properties");

总的来说,这很困惑,我不喜欢。难道没有更好的方法来共享db1db2吗?

此外,从 java run 参数定义的 boolean makeDirectConnection 阻止我使用 final db1db2。有什么建议如何解决这个问题吗? (这取决于程序执行的环境 - 但我不想让它依赖于主机名或其他操作系统的东西。

最佳答案

因为您需要为测试和部署设置不同的默认实例。因此创建一个property file其中提到应使用哪个文件来为 db1db2 创建默认实例。

要消除从单元测试代码中调用 MainClass.dbConnect() 的需要,只需创建一个静态 block 并在此处初始化 db1db2默认。例如如果属性文件是 defaultDB.properties 并具有以下内容:

DB1=db/config/test/db1.properties
DB2=db/config/test/db2.properties

然后使用以下内容:

static private Properties prop;
static {
prop = new Properties();
prop.load(new FileInputStream("defaultDB.properties"));
db1 = JdbcFactory.getInstance(prop.getProperty("DB1"));
db2 = JdbcFactory.getInstance(prop.getProperty("DB2"));
}

关于java - 不同类之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45792754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com