此处将为大家介绍关于使用SpringBoot在嵌入式Tomcat服务器上部署资源的详细内容,并且为您解答有关springboot内嵌tomcat的相关问题,此外,我们还将为您介绍关于java–如何使用
此处将为大家介绍关于使用Spring Boot在嵌入式Tomcat服务器上部署资源的详细内容,并且为您解答有关spring boot内嵌tomcat的相关问题,此外,我们还将为您介绍关于java – 如何使用spring boot和嵌入式tomcat禁用TLSv1.0?、Spring Boot-替换默认的嵌入式Tomcat连接器、Spring Boot启用/禁用带有配置文件的嵌入式Tomcat、Spring Boot嵌入式Tomcat性能的有用信息。
本文目录一览:- 使用Spring Boot在嵌入式Tomcat服务器上部署资源(spring boot内嵌tomcat)
- java – 如何使用spring boot和嵌入式tomcat禁用TLSv1.0?
- Spring Boot-替换默认的嵌入式Tomcat连接器
- Spring Boot启用/禁用带有配置文件的嵌入式Tomcat
- Spring Boot嵌入式Tomcat性能
使用Spring Boot在嵌入式Tomcat服务器上部署资源(spring boot内嵌tomcat)
我有一个项目,其中将来自多个来源的数据处理为某些数据结构。程序完成这些结构的构建后,我希望它建立一个服务器,使用户可以手动微调这些结构。我认为使用Spring
Boot设置的嵌入式Tomcat服务器上的Spring MVC正是我所需要的。
我想使用Thymeleaf作为查看技术,因此
@Configuration@ComponentScan@EnableAutoConfigurationpublic class Main { public static void main(String... args) throws Exception { // Lots of initialization ... SpringApplication.run(Main.class, args); } @Bean public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(); resolver.setPrefix("/resources/views/"); resolver.setSuffix(".html"); resolver.setTemplateMode("HTML5"); resolver.setCacheable(false); return resolver; } public SpringTemplateEngine templateEngine() { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.setTemplateResolver(templateResolver()); return engine; } @Bean public ViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setOrder(1); viewResolver.setViewNames(new String[]{"*"}); viewResolver.setCache(false); return viewResolver; }}
和
@Controllerpublic class WebController { @RequestMapping(value="/greeting", method=RequestMethod.GET) public String greeting() { return "greeting"; }}
但是,即使在处有一个查看文件/resources/views/greeting.html
,服务器对URL的回复http://localhost:8080/greeting
也是
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers
在调试器中单步执行代码后,似乎在某个时候ServletContext
(应该以流的形式返回视图文件)看起来像这样的临时文件夹
C:\Users\Michael\AppData\Local\Temp\tomcat-docbase.971027024999448548.8080
这是空的。
现在我知道我需要
服务器启动时将资源部署到临时文件夹
让服务器在资源已经存在的目录中运行
我的问题是我既不知道怎么做,也不知道哪种方法最好。有人告诉我1是更好的智慧,但是任何建议都是值得欢迎的。
编辑
好的,我最终得到了一些可行的方法。虽然Joe的回答无疑帮助我前进,但似乎我不得不以一种使我感到困惑的方式更改Maven配置。
将模板greeting.html
放入/resources/templates/greeting.html
并添加resources
到构建路径后,出现错误
javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/word/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
换句话说,Thymeleaf似乎配置不正确。经过一番摆弄之后,我最终将spring-boot-starter-parent
in
的版本pom.xml
从更改0.5.0.BUILD-SNAPSHOT
为0.5.0.M6
:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!--<version>0.5.0.BUILD-SNAPSHOT</version>--> <version>0.5.0.M6</version></parent>
并从Thymeleaf依赖项中删除版本标签
<dependencies> <!-- ... --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring3</artifactId> <!--<version>${thymeleaf-spring3-version}</version>--> </dependency></dependencies>
在此之后,它起作用了。
有人可以解释一下为什么我需要更改的版本spring-boot-starter-parent
才能从中删除版本标签thymeleaf-spring3
,为什么这样做是必要的?
答案1
小编典典servlet上下文根不是嵌入式服务器中模板的最佳位置。有一种方法可以做到,但是如果我是我,我会顺其自然,并使用类路径。如果允许Spring
Boot配置模板解析器(也建议使用),则classpath:/templates
默认情况下它将进入。在引导代码库中有几个使用百里香的示例,因此,如果您有不同的要求,则应该很容易地修改其中的一个。
java – 如何使用spring boot和嵌入式tomcat禁用TLSv1.0?
SSL:
协议:TLSv1.2
key-store:/E:/key/server.jks
密钥存储密码:serverpkcs12
如果只在IE中选择“USE TLS 1.0”,我仍然可以访问网页.
See this pic–not work.
但是,如果不使用嵌入式tomcat,并为位于server.xml中的Connector添加这些参数,它对我来说很好 – IE阻止的网页. See this pic–worked for me
sslProtocols =“TLSv1.2”sslEnabledProtocols =“TLSv1.2”
我也尝试了一些VM参数,例如-Dhttps.protocols =“TLSv1.2”,它们都是无用的.
那我该怎么办呢?
解决方法
server.ssl.ciphers:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
并使用CURL
openssl s_client -connect example.com:443 -tls1
您将看到该请求将被忽略/拒绝,因为您在application.yml中设置的密码将仅验证TLSv1.2请求.
Spring Boot-替换默认的嵌入式Tomcat连接器
我需要将AJP连接器添加到嵌入式Tomcat并 禁用(或替换) 侦听8080 的默认连接器 。
我尝试使用EmbeddedServletContainerCustomizer对此进行自定义,但是我无法获得Tomcat对象的句柄来替换在那里创建的默认连接器。结果,除了AJP端口之外,我最终还使用了8080上的http端口。
接下来,我尝试扩展TomcatEmbeddedServletContainerFactory并覆盖其getTomcatEmbeddedServletContainer方法。对于JavaDoc,这似乎是替换默认连接器的理想之地,但最终仍被启用(也不会创建我的AJP连接器)。有什么想法可能会丢失吗?我已经通过调试器验证了我的配置正在运行。
根据下面的答案,这是最干净的解决方案:
@Beanpublic EmbeddedServletContainerFactory tomcat() { TomcatEmbeddedServletContainerFactory myFactory = new TomcatEmbeddedServletContainerFactory(); myFactory.setProtocol("AJP/1.3"); myFactory.setPort(9000); return myFactory;}@Beanpublic 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); } }); } };}
答案1
小编典典您可以使用将A TomcatConnectorCustomizer
连接器添加到中,以将其配置为使用AJPTomcatEmbeddedServletContainerFactory
。
Spring Boot启用/禁用带有配置文件的嵌入式Tomcat
我正在编写一个Spring
Boot应用程序,该应用程序使用几个@Configuration
类之一,具体取决于文件中@Profile
设置的类application.properties
。
这些配置类之一使用REST接口,因此,我将其包括spring-boot-starter-web
为依赖项。
这将启动嵌入式Tomcat实例,这很好。
问题是,其他配置文件不需要嵌入式服务器(例如,我使用JMS来处理传入消息而不是REST)。
有没有什么方法可以阻止@SpringBootApplication
Tomcat在默认情况下启动,而仅将其用于REST
Configuration类?例如,通过用@EnableWebMVC
这是我的@Configuration
课程的示例:
休息:
@Profile({"REST"})@Configuration@EnableWebMvcpublic class HttpConfiguration{ . . .}
JMS:
@Profile({"JMS"})@Configuration@EnableJmspublic class JMSConfiguration{ . . .}
谢谢
答案1
小编典典采用
@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, WebMvcAutoConfiguration.class})
排除Spring Boot对嵌入式servlet容器的自动配置。另外,您需要为非REST案例设置以下属性,以使Spring Boot不会尝试启动RESTWebApplicationContext
(需要一个servlet容器):
spring.main.web-environment=false
然后通过导入在REST配置文件中启用嵌入式TomcatEmbeddedServletContainerAutoConfiguration.class
(这将自动配置延迟到REST配置文件加载后:
@Profile({"REST"})@Configuration@Import(EmbeddedServletContainerAutoConfiguration.class)public class HttpConfiguration { // ...}
如果使用任何EmbeddedServletContainerCustomizer
,还需要导入EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class
。
Spring Boot嵌入式Tomcat性能
我正在为我的应用程序开发Microservices API.我从Spring Boot应用程序开始.我创建了两个工件 – “嵌入式tomcat的业务代码”和“没有嵌入式tomcat的业务代码”.
当我比较性能结果时,我可以看到“非嵌入式tomcat”(即在独立的tomcat上执行)由于本机执行而提供了良好的输出.
那么基本上嵌入式tomcat和独立tomcat之间的区别是什么呢?
两次执行之间的表现有何不同?
APR(Apache Portable Runtime)在tomcat线程执行中起着重要作用.
默认情况下,嵌入式tomcat执行NIO. NIO和BIO是基于Java的执行,而APR是本机执行.当我们比较NIO和APR的性能时,APR要快得多.
事实上,所有基于Linux的tomcat包都附带了tomcat lib文件夹下的APR库.
在嵌入式tomcat(即Spring Boot)中启用APR后,与独立的tomcat相比,性能执行相同.
http://tomcat.apache.org/tomcat-7.0-doc/apr.html
今天的关于使用Spring Boot在嵌入式Tomcat服务器上部署资源和spring boot内嵌tomcat的分享已经结束,谢谢您的关注,如果想了解更多关于java – 如何使用spring boot和嵌入式tomcat禁用TLSv1.0?、Spring Boot-替换默认的嵌入式Tomcat连接器、Spring Boot启用/禁用带有配置文件的嵌入式Tomcat、Spring Boot嵌入式Tomcat性能的相关知识,请在本站进行查询。
本文标签: