我正在尝试解决一个问题,即我必须使用与生产和开发相对应的.p12文件。我正在寻找一种方法让java知道它是在prod还是dev中运行,以便我可以选择合适的p12来使用。
目前我使用以下逻辑
private static final String PATH_TO_P12_DEV = "/JavaPNSDEV.p12";
private static final String PATH_TO_P12_PROD = "/JavaPNSPROD.p12";
private InputStream keystoreInputStream = null;
private final Logger logger = Logger.getLogger(ApplePushNotificationSystem.class);
private PushManager<SimpleApnsPushNotification> pushManager = null;
private void connect() throws NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException, KeyManagementException, KeyStoreException {
try {
if(InetAddress.getLocalHost().getHostName().toLowerCase().equals("hostname")){
keystoreInputStream = this.getClass().getResourceAsStream(PATH_TO_P12_PROD);
}else{
keystoreInputStream = this.getClass().getResourceAsStream(PATH_TO_P12_DEV);
}
然而,这让我担心,因为一旦主机名更改/某人更改主机名,这将失败。
解决像这样的问题的正确方法是什么?
由于
答案 0 :(得分:2)
正确的方法是通过配置文件或环境变量将一些配置选项传递给应用程序。然后,您可以轻松区分不同的环境。
作为简单示例:您可以使用-DConfig=PRO
运行生产应用程序,使用-DConfig=DEV
进行开发。然后,您可以通过选中System.getProperty("Config")
答案 1 :(得分:1)
我会使用配置文件。这样,您可以拥有一个指向您的开发环境的文件和一个指向您的生产环境的文件。
也许您可以查看apache commons配置吗?
答案 2 :(得分:0)
详细信息取决于您运行的基础架构类型。假设您在某种Web应用程序服务器中运行,应该可以将Environment变量设置为标识字符串。如果你只有这个单一的配置元素(使用哪个.p12文件),你可以放入一个if条件:
if ("PROD".equals(System.getenv("STAGE"))){
// use on file
} else {
// use a different file
}
大多数情况下,您有多个配置元素。在这种情况下,我会将所有信息放在属性文件中。每个阶段一个。然后使用stage环境变量来确定要使用的文件。