我正试图解决一个问题,在这个问题上,我必须使用与生产和开发相对应的.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);
}然而,这让我感到担忧,因为一旦主机名更改/有人更改主机名,就会失败。
像这样解决问题的正确方法是什么?
谢谢
发布于 2014-08-26 12:36:41
正确的方法是通过配置文件或仅通过环境变量将一些配置选项传递给应用程序。然后,您可以很容易地区分不同的环境。
作为一个简单的例子:您可以使用-DConfig=PRO运行生产应用程序,也可以使用-DConfig=DEV进行开发。然后,您可以通过检查System.getProperty("Config")来区分它们。
发布于 2014-08-26 12:36:21
我会使用配置文件。这样,您就可以拥有一个指向您的开发环境的文件和一个指向您的生产环境的文件。
也许您可以查看以实现这一点?
发布于 2014-08-26 12:44:09
细节取决于您运行的基础设施的类型。假设您在某种类型的Webapplication服务器中运行,则应该可以将环境变量设置为标识字符串。如果您只有这个配置元素(要使用哪个.p12文件),则只需输入一个If条件:
if ("PROD".equals(System.getenv("STAGE"))){
// use on file
} else {
// use a different file
}大多数情况下,您有多个配置元素。在这种情况下,我会把所有的信息放在财产文件中。每个舞台一张。然后使用stage环境变量来确定要使用的文件。
https://stackoverflow.com/questions/25505974
复制相似问题