我开发了一个可以连接到Oracle Coherence集群的SpringBoot应用程序。 App,作为coherence节点需要一些JVM属性来连接到群集。我想在spring boot自定义启动器中设置此属性(取自属性文件)。我在@Configuration
类中设置了系统属性,我可以读取没有问题的那些,但是一致性没有看到一个属性tangosol.pof.enabled
而且它失败了。当我打电话给System.getProperty(..)
时,它就在那里但不起作用(属性不是通过连贯性看到的)。
当我在我的应用程序中的某个其他bean中使用@Autowire
配置类时,或者当我的配置类不在spring boot starter中而是在我的应用程序中时,它可以工作。
这是我的代码:
启动器中的配置类(可行)
@Configuration
@PropertySource("coherence-app.properties")
public class EnvironmentConfig {
public static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentConfig.class);
public EnvironmentConfig(Environment environment, ConfigurableApplicationContext ctx){
Properties props = new Properties();
ConfigsHelper.TANGOSOL_COHERENCE_CONFIGS.stream()
.forEach(prop -> props.setProperty(prop, environment.getProperty(prop)));
if (!ConfigsHelper.setTangosolCoherenceProperties(props)){
LOGGER.error("Can't set coherence props");
System.exit(1);
}
}
}
然后当我尝试连接到群集时:
CacheFactory.ensureCluster();
我有错误:
2017-08-09 13:17:56.049 / 7.494 Oracle Coherence GE 12.2.1.0.2 (thread = Cluster,member = n / a):无法反序列化配置消息 从成员1收到。该成员配置如下 序列化器:com.tangosol.io.DefaultSerializer {loader = sun.misc.Launcher$AppClassLoader@18b4aac2},可能是 与发件人配置的序列化程序不兼容。 java.io.StreamCorruptedException:无效类型:100 at com.tangosol.util.ExternalizableHelper.readObjectInternal(ExternalizableHelper.java:2477) 在 com.tangosol.util.ExternalizableHelper.readObject(ExternalizableHelper.java:2464) 在 com.tangosol.io.DefaultSerializer.deserialize(DefaultSerializer.java:66) 在 com.tangosol.coherence.component.util.daemon.queueProcessor.Service.readObject(Service.CDB:1) 在 com.tangosol.coherence.component.net.Message.readObject(Message.CDB:1) 在 com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.ClusterService $ ServiceJoining.read(ClusterService.CDB:14) 在 com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.deserializeMessage(Grid.CDB:20) 在 com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.onNotify(Grid.CDB:21) 在 com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.ClusterService.onNotify(ClusterService.CDB:3) at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:45) 在java.lang.Thread.run(Thread.java:748)
它与tangosol.pof.enabled = false属性相关联。 奇怪的是,当我打电话时
System.getProperty("tangosol.pof.enabled")
在ensureCluster之前它是真的。
此代码在未启动时正常工作。然后配置bean早先初始化并运行。
您是否知道如何解决此问题。