我有以下使用@Value注释的属性.我有一个使用默认分隔符':'定义的默认值
@Value("${prop.url:http://myurl.com}")
Run Code Online (Sandbox Code Playgroud)
有没有办法逃避':' http://myurl.com
或我必须在我的配置中定义一个不同的分隔符值.
我正在尝试设置@Configurable
域对象(不是由spring容器管理).
我已经通过添加-javaagent:path/to/spring-instrument.jar
作为JVM参数来完成这项工作但是我不能100%清楚这个-javaagent是否必须到位.我在Tomcat 8上运行它.我可能会误解文档,但似乎我可以使用另一种机制来实现这一点,特别是这一行:
不要定义
TomcatInstrumentableClassLoader
了对Tomcat 8.0
高.相反,让SpringInstrumentableClassLoader
通过TomcatLoadTimeWeaver
策略自动使用Tomcat的新本机设施.
代码示例如下:
@SpringBootApplication
@EnableLoadTimeWeaving
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Bean
public MyService myService(){
return new MyService();
}
}
Run Code Online (Sandbox Code Playgroud)
@Configurable
public class MyDomainObject {
@Autowired
private MyService myService;
public MyService getMyService(){
return myService;
}
}
Run Code Online (Sandbox Code Playgroud)
public class MyService {
private static final Logger log = LoggerFactory.getLogger(MyService.class);
public void test(){
log.info("test");
}
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法在不指定-javaagent的情况下编织这些@Configrable对象?我有兴趣学习如何在将WAR作为WAR部署到独立Tomcat 8服务器和/或在作为'胖'jar启动时使用嵌入式Tomcat 8服务器时完成此操作. …
aspectj load-time-weaving tomcat8 spring-boot embedded-tomcat-8
我正在查看位于此处的 spring-boot 文档
具体来说,有关考虑属性的顺序的部分:
进一步来说:
打包在 jar 内的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)
首先我要提到的是,使用这种方法加载配置文件特定配置时没有任何问题(前提是这些文件位于 classpath:/ 或 classpath:/config.xml 中)。
然而,我希望做的是实现如下所示的约定:
classpath:/default/application.properties
classpath:/{profile}/application.properties
Run Code Online (Sandbox Code Playgroud)
此外,我想在不使用该spring.config.location
属性的情况下实现此配置。我对 Spring Boot 还很陌生,所以我正在寻找一些关于如何实现此约定的提示。根据我的研究,这似乎可以通过添加自定义 ConfigFileApplicationListener 来实现。请告诉我这是否是一个合理的起点或任何其他可能更好的想法。
更新:似乎如果我可以以编程方式构建spring.config.location
属性列表,我可以在 classpath:/default、classpath:{profile} 等位置传递。基于 spring.profiles.active 环境变量。以下 ConfigFileApplicationListener 似乎是我想调用的:
public void setSearchLocations(String locations)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定在生命周期的哪个位置进行这样的调用。
我正在使用<jmxConfigurator/>
logback 中的元素; jmxConfigurator声明如下:
Thus, unless your application is a standalone Java application, you **MUST** unregister the JMXConfigurator instance from the JVM's Mbeans server.
Run Code Online (Sandbox Code Playgroud)
logback文档还提到了一个<shutdownHook/>
配置元素,根据文档执行以下操作:
Installing a JVM shutdown hook is a convenient way for shutting down logback and releasing associated resources.
Run Code Online (Sandbox Code Playgroud)
是否包含<shutdownHook/>
元素注意取消注册<jmxConfigurator/>
?
当我使用STS 3.6.0
默认的'Servers'文件夹时(Vmware vFabric v2.5 - v.2.9)
,总是会添加到我创建的任何新工作区中.自安装以来,STS 3.6.1
我不再看到默认的"服务器"附加到工作区.现在似乎STS 3.6.1
是捆绑Pivotal tc Server v3.0
,这似乎有利于Tomcat 8的默认底层二进制文件(这需要Java SE 7,但我需要使用Java SE 6(这是我的工作区默认))所以我最好猜测为什么自动我没有添加'Servers'文件夹,因为我没有将Java SE7设置为我的工作区默认设置,但我有点惊讶Tomcat 8被认为是tc Server的默认二进制文件;
我也有问题为我的工作区手动添加服务器
(e.g. New->Server->Pivotal tcServer v3.0)
Run Code Online (Sandbox Code Playgroud)
在我选择了'Pivotal tcServer v3.0'
所选的默认Tomcat版本的位置后Tomcat 8.0.9.B.RELEASE
.选择后我收到以下警告:
"Tomcat 8 requires Java SE7 or later. Change the JRE to one that meets this requirement"
Run Code Online (Sandbox Code Playgroud)
明白了,但......
当我选择Tomcat 7.0.55.A.RELEASE
作为版本时,我仍然看到相同的消息,我无法继续添加服务器.(我的理解是Java SE6支持Tomcat 7.x).这是我认为的意外行为,因为我的工作区默认JRE支持Tomcat 7.是否存在此问题?
我想下载3.6.0 sts-bundle
但我找不到在https://spring.io/tools/sts/all上执行此操作的地方.我只看到3.6.1的下载.有谁知道可以做到这一点?谢谢.