架构说设计到数据量较大的应用要从k8s中迁出单独机器部署
于是将8节点的服务准备迁出,且端口号在数据库中保存
在不引入springcloud的方式下 启动spring容器中对args进行配置属性注入
思路一 通过spring容器获取信息
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
SpringApplication build = new SpringApplicationBuilder(Application.class).web(WebApplicationType.NONE).build(args);
ConfigurableApplicationContext run = build.run();
ConfigurableEnvironment environment = run.getEnvironment();
AA bean = run.getBean(AA.class);
int port = bena.port();
run.close();
List<String> argList;
if (args != null) {
argList = new ArrayList<>(Arrays.asList(args));
} else {
argList = new ArrayList<>();
}
argList.add("--Dserver.port=6999");
argList.add("--server.port=6998");
argList.add("-Dserver.port=6997");
argList.add("-server.port=6996");
argList.add("Dserver.port=6995");
argList.add("server.port=6994");
System.out.println("-------------------------------------------------------------------------");
SpringApplication.run(Application.class, argList.toArray(new String[0]));
}
思路二 非spring容器获取
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
额外的知识点
修改final属性的字段值
MutablePropertySources propertySources = environment.getPropertySources();
for (PropertySource<?> propertySource : propertySources) {
Object source = propertySource.getSource();
if (source instanceof Map) {
Object o = Map.class.cast(source).get("server.port");
if (o == null) {
continue;
}
if (o instanceof OriginTrackedValue) {
OriginTrackedValue cast = OriginTrackedValue.class.cast(o);
Field value = OriginTrackedValue.class.getDeclaredField("value");
Field modifiers = Field.class.getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(value, modifiers.getModifiers() & ~Modifier.FINAL);
value.setAccessible(true);
value.set(cast, bean.port());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架