【背景】
多个独立的web项目合并到同一个Maven多模块项目中,目的是抽取公共模块,减少维护成本。
各个web项目的客户编码有不同的前缀,所以中各个web项目中都定义了一个常量,但是各个站点的值是不同的,中合并到一个Maven多模块项目后,抽取公共部分时由于中公共部分代码中需要用到这个常量,所以就随便将其中一个项目的该常量拿到了公共模块中,而各个站点的该常量保留,可是项目真正启动后,当使用该常量时发现其值一直是公共模块定义的,导致各个站点的客户编码使用了同样的前缀,从而出现了问题。
【结论】
如果公共模块中一个常量是各个站点都需要使用的,但是中各个单点的值又不一致,那么千万不要将该常量定义成final的。
【解决方法】
- 去除final定义即可
- 将该常量定义到各个项目的配置文件中
【举例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| pacakge test.constants;
public class Constants {
public static final String PR = "TEST";
}
pacakge test.utils;
public class TestUtil { public static String getAccountNo(){ return Constants.PR + 1111; } }
pacakge test.constants;
public class Constants {
public static final String PR = "A";
}
pacakge test.utils;
public class Account { public static void main(String[] args) { System.out.println(TestUtil.getAccountNo()); } }
pacakge test.constants;
public class Constants {
public static final String PR = "B";
}
pacakge test.utils;
public class Account { public static void main(String[] args) { System.out.println(TestUtil.getAccountNo()); } }
|