首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -如何检测环境

Java -如何检测环境
EN

Stack Overflow用户
提问于 2014-08-26 12:34:38
回答 3查看 3.3K关注 0票数 2

我正试图解决一个问题,在这个问题上,我必须使用与生产和开发相对应的.p12文件。我正在寻找一种让java知道它是运行在prod还是dev中的方法,这样我就可以选择合适的p12来使用。

目前,我正在使用以下逻辑

代码语言:javascript
复制
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);
        }

然而,这让我感到担忧,因为一旦主机名更改/有人更改主机名,就会失败。

像这样解决问题的正确方法是什么?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-26 12:36:41

正确的方法是通过配置文件或仅通过环境变量将一些配置选项传递给应用程序。然后,您可以很容易地区分不同的环境。

作为一个简单的例子:您可以使用-DConfig=PRO运行生产应用程序,也可以使用-DConfig=DEV进行开发。然后,您可以通过检查System.getProperty("Config")来区分它们。

票数 2
EN

Stack Overflow用户

发布于 2014-08-26 12:36:21

我会使用配置文件。这样,您就可以拥有一个指向您的开发环境的文件和一个指向您的生产环境的文件。

也许您可以查看以实现这一点?

票数 1
EN

Stack Overflow用户

发布于 2014-08-26 12:44:09

细节取决于您运行的基础设施的类型。假设您在某种类型的Webapplication服务器中运行,则应该可以将环境变量设置为标识字符串。如果您只有这个配置元素(要使用哪个.p12文件),则只需输入一个If条件:

代码语言:javascript
复制
if ("PROD".equals(System.getenv("STAGE"))){
    // use on file
} else {
    // use a different file
}

大多数情况下,您有多个配置元素。在这种情况下,我会把所有的信息放在财产文件中。每个舞台一张。然后使用stage环境变量来确定要使用的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25505974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档