【问题标题】:Cargo unable to set the system properties values during bean injectionCargo 在 bean 注入期间无法设置系统属性值
【发布时间】:2013-09-16 21:54:13
【问题描述】:

我想做什么?
- 为了测试,我想为我的应用程序设置serverKeyvalidity,并希望cargo注入到TokenUtils中,所以这些值在应用程序加载时可用

我尝试了什么?
我使用JBoss作为容器,相关代码是

@Stateless
public class TokenUtils {

    public static final String AUTH_TOKEN = "X-BB-AUTH";
    public static final String BB_AUTH_PRIVATE_KEY = "auth.key";
    public static final String BB_AUTH_VALIDITY = "auth.validity";
    private static final Pattern PATTERN = Pattern.compile(":");

    private String serverPrivateKey;
    private long validity;

    private static final Logger LOGGER = LoggerFactory.getLogger(TokenUtils.class);

    @SuppressWarnings("UnusedDeclaration")
    public TokenUtils() {
    }

    public TokenUtils(@Nonnull @Configuration(BB_AUTH_PRIVATE_KEY) final String serverPrivateKey,
                      @Configuration(BB_AUTH_VALIDITY) final long validity) {
        this.serverPrivateKey = serverPrivateKey;
        this.validity = validity;

        LOGGER.info("serverPrivateKey:" + serverPrivateKey);
        LOGGER.info("validity:" + validity);
    }
}

另外,我在创建TokenUtils 的同一包的src/main/resources 中有META-INF/beans.xml,所以我想bean 实例化不是问题

我希望在 cargo 实例化 bean 时注入这些值,所以我将 pom.xml 中的值设置为

<container>
  <systemProperties>
    <auth.key>secure</auth.key>
    <auth.validity>720000</auth.validity>
  </systemProperties>
</container>

当我启动货物时,我看到以下情况发生

INFO] [talledLocalContainer] 06:07:08,068 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named TokenUtils in deployment unit deployment "market.war" are as follows:
[INFO] [talledLocalContainer] 
[INFO] [talledLocalContainer]   java:global/market/TokenUtils!com.org.proj.service.authentication.TokenUtils
[INFO] [talledLocalContainer]   java:app/market/TokenUtils!com.com.proj.service.authentication.TokenUtils
[INFO] [talledLocalContainer]   java:module/TokenUtils!com.com.proj.service.authentication.TokenUtils
[INFO] [talledLocalContainer]   java:global/market/TokenUtils
[INFO] [talledLocalContainer]   java:app/market/TokenUtils
[INFO] [talledLocalContainer]   java:module/TokenUtils

有问题?
- 但值是 serverPrivateKey=nullvalidity=0
- 此外,在 bean 实例化期间,我应该能够看到 LOGGER.info 值,但我在日志中找不到它们

我做错了什么?

【问题讨论】:

    标签: java jakarta-ee java-ee-6 cargo maven-cargo


    【解决方案1】:

    我意识到了错误。我没有在TokenUtils 构造函数中使用@Inject。以下更改修复了它

    @Inject
    public TokenUtils(@Nonnull @Configuration(BB_AUTH_PRIVATE_KEY) final String serverPrivateKey,
                          @Configuration(BB_AUTH_VALIDITY) final long validity) {
            this.serverPrivateKey = serverPrivateKey;
            this.validity = validity;
    
            LOGGER.info("serverPrivateKey:" + serverPrivateKey);
            LOGGER.info("validity:" + validity);
        }
    

    这样我可以在日志中看到如下值

    [INFO] [talledLocalContainer] 06:39:30,042 INFO  [com.org.proj.commons.cdi.config.ConfigurationProvider] (http--0.0.0.0-9090-1) getProperty(auth.key) is secure
    [INFO] [talledLocalContainer] 06:39:30,043 INFO  [com.org.proj.commons.cdi.config.ConfigurationProvider] (http--0.0.0.0-9090-1) getProperty(auth.validity) is 720000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 2012-12-20
      • 1970-01-01
      • 2011-12-11
      • 2011-06-03
      • 2019-03-03
      • 2016-07-02
      • 2023-03-07
      相关资源
      最近更新 更多