在Spring Boot 1.1.5和1.1.6中都有这个问题 - 我正在使用@Value注释加载一个类路径资源,当我在STS(3.6.0,Windows)中运行应用程序时,它可以正常工作.但是,当我运行mvn包然后尝试运行jar时,我得到FileNotFound异常.
资源message.txt位于src/main/resources中.我检查了jar并验证它在顶层包含文件"message.txt"(与application.properties相同的级别).
这是应用程序:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements CommandLineRunner {
private static final Logger logger = Logger.getLogger(Application.class);
@Value("${message.file}")
private Resource messageResource;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... arg0) throws Exception {
// both of these work when running as Spring boot app from STS, but
// fail after mvn package, and then running as java -jar
testResource(new ClassPathResource("message.txt"));
testResource(this.messageResource);
}
private void testResource(Resource resource) {
try { …Run Code Online (Sandbox Code Playgroud) 我有一个使用spring-data-rest的项目,并且有一个仅使用Spring Data的依赖项目.这两个项目都有spring数据存储库并用于@EnableJpaRepositories实现其存储库接口,但我只想在父项目中导出存储库.
这是我的问题:是否有一些方法可以将Spring Data REST配置为仅公开父项目中资源的休息端点,而不必显式注释依赖项目中的每个存储库@RepositoryRestResource(exported = false)?
如果我只能通过@RepositoryRestResource禁用它来实现这一点,更糟糕的是,没有其他具有不同用例的项目将能够为这些存储库启用REST端点,我的依赖项目将不得不包括仅用于...的Spring Data REST.
我需要向嵌入式Tomcat添加一个AJP连接器,并禁用(或替换)侦听8080 的默认连接器.
我尝试使用EmbeddedServletContainerCustomizer进行自定义,但我无法获取Tomcat对象的句柄来替换在那里创建的默认连接器.因此,除了我的AJP端口之外,我最终得到了8080上的http端口.
接下来,我尝试扩展TomcatEmbeddedServletContainerFactory并覆盖其getTomcatEmbeddedServletContainer方法.根据JavaDoc,这似乎是替换默认连接器的最佳位置,但它仍然最终被启用(并且也不会创建我的AJP连接器).我可能会缺少什么想法?我已经通过调试器验证了我的配置正在运行.
根据以下答案,这是最干净的解决方案:
@Bean
public EmbeddedServletContainerFactory tomcat() {
TomcatEmbeddedServletContainerFactory myFactory = new TomcatEmbeddedServletContainerFactory();
myFactory.setProtocol("AJP/1.3");
myFactory.setPort(9000);
return myFactory;
}
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer2() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setRedirectPort(9001);
}
});
}
};
}
Run Code Online (Sandbox Code Playgroud) 我有一个JpaRepository接口,当它与包含@ComponentScan的主类在一个单独的包中时,它没有被Spring数据实现(或注入?).
我的包结构(仅为了演示错误):
- org.demo.jpa.myapp
Application.java
- org.demo.jpa.repo
MyDomainObject.java
MyRepository.java
Run Code Online (Sandbox Code Playgroud)
MyRepository.java
public interface MyRepository extends JpaRepository<MyDomainObject, Long> { }
Run Code Online (Sandbox Code Playgroud)
Application.java
@Configuration
@ComponentScan(basePackages="org.demo.jpa")
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args);
if (context.getBean(MyRepository.class) == null){
throw new NullPointerException("repo was not initialized!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
例外
Exception in thread "main" 2014-09-01 11:20:26.336 INFO 6156 --- [ main] org.demo.jpa.myapp.Application : Started Application in 2.824 seconds (JVM running for
3.362)
2014-09-01 11:20:26.339 INFO 6156 --- [ Thread-1] …Run Code Online (Sandbox Code Playgroud) 我正在做一个研究项目,以确定我们可以在多大程度上使用Spring启动配置嵌入式Tomcat.我被要求调查的一个项目是关于我们是否仍然可以使用应用程序管理器.我没有具体的用例说明我们为什么要使用嵌入式tomcat的应用程序管理器,所以也许这使得这个问题无法回答:
Spring Boot使用的嵌入式tomcat 7是否包含tomcat管理器应用程序,如果没有,添加/启用它需要什么?