`
rensanning
  • 浏览: 3547934 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38135
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607261
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682256
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89318
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401805
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69685
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91692
社区版块
存档分类
最新评论

Spring Boot 入门 - 基础篇(2)- 嵌入式容器

 
阅读更多
Spring Boot便于开发支持嵌入式容器(比如:Apache Tomcat, Eclipse Jetty, RedHat Undertow),默认启动嵌入式Tomcat容器,当然也可以打包发不动独立的Servlet容器(比如:Apache Tomcat,WildFly等)。

(1)修改Tomcat版本

1.5.1.RELEASE默认采用的是8.5.11。
引用
2017-02-07 16:23:44.964  INFO 8040 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.11


修改pom.xml,重新运行。
    <properties>
        <tomcat.version>8.0.41</tomcat.version>
    </properties>


引用
2017-02-07 16:26:37.799  INFO 7372 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.41


(2)修改端口号/web路径

1)修改SpringBoot自动配置项
src/main/resources/application.properties
引用
server.port=8081
server.contextPath=/springboot
server.sessionTimeout=30


引用
2017-02-07 16:23:45.740  INFO 8040 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-02-07 16:23:45.746  INFO 8040 --- [           main] c.r.s.SpringBootDemo4Application         : Started SpringBootDemo4Application in 2.178 seconds (JVM running for 2.668)
2017-02-07 16:24:16.474  INFO 8040 --- [nio-8081-exec-1] o.a.c.c.C.[.[localhost].[/springboot]    : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-02-07 16:24:16.474  INFO 8040 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-02-07 16:24:16.487  INFO 8040 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 13 ms


再次访问 http://localhost:8081/springboot/

2)通过EmbeddedServletContainerCustomizer
@Configuration
public class ContainerConfig {

	@Bean
	public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {
		return new EmbeddedServletContainerCustomizer() {
			@Override
			public void customize(ConfigurableEmbeddedServletContainer container) {
				// Port Number
				container.setPort(8081);
				// Context Path
				container.setContextPath("/springboot");
				// Session Timeout
				container.setSessionTimeout(30, TimeUnit.MINUTES);
			}
		};
	}

}


Spring Boot提供了大量的xxxCustomizer类用于扩展已有功能,比如RestTemplateCustomizer、Jackson2ObjectMapperBuilderCustomizer、PlatformTransactionManagerCustomizer等等,这些都会在以后的开发中慢慢用到。

3)通过EmbeddedServletContainerFactory
@Configuration
public class ContainerConfig {

	@Bean
	public EmbeddedServletContainerFactory servletContainer() {
		TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();

		tomcat.setPort(8081);
		tomcat.setContextPath("/springboot");
		tomcat.setSessionTimeout(30, TimeUnit.MINUTES);

		return tomcat;
	}

}


(3)通过TomcatEmbeddedServletContainerFactory类优化Tomcat

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected void postProcessContext(Context context) {
           // ...
        }
    };
    tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
    return tomcat;
}


1)开启SSL(HTTPS)
默认SpringBoot启动8080端口的HTTP服务,通过以下配置可以开启8443端口的HTTPS服务。
src/main/resources/application.properties
引用
server.port=8443
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=password
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat


但是Spring Boot不支持通过application.properties同时支持HTTP和HTTPS。
可以通过在application.properties中设置HTTPS,在代码中添加Connector支持HTTP来实现。
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(8080);
tomcat.addAdditionalTomcatConnectors(connector);


2)AJP Connector
Connector ajpConnector = new Connector("AJP/1.3");
ajpConnector.setProtocol("AJP/1.3");
ajpConnector.setPort(9090);
ajpConnector.setSecure(false);
ajpConnector.setAllowTrace(false);
ajpConnector.setScheme("http");
tomcat.addAdditionalTomcatConnectors(ajpConnector);


3)apr/apr-util/tomcat-native
前提是必须安装这些软件,并指定java.library.path参数给JVM。
LifecycleListener arpLifecycle = new AprLifecycleListener();
tomcat.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
tomcat.addContextLifecycleListeners(arpLifecycle);


@Configuration
public class ContainerConfig {

	@Bean
	public EmbeddedServletContainerFactory servletContainer() {
	    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
	        @Override
			protected void postProcessContext(Context context) {
	           // ...
	        }
	    };

		tomcat.setPort(8081);
		tomcat.setContextPath("/springboot");
		tomcat.setSessionTimeout(30, TimeUnit.MINUTES);

		LifecycleListener arpLifecycle = new AprLifecycleListener();
		tomcat.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
		tomcat.addContextLifecycleListeners(arpLifecycle);

		Connector ajpConnector = new Connector("org.apache.coyote.ajp.AjpAprProtocol");
		ajpConnector.setPort(9090);
		ajpConnector.setSecure(false);
		ajpConnector.setAllowTrace(false);
		ajpConnector.setScheme("http");
		tomcat.addAdditionalTomcatConnectors(ajpConnector);

		return tomcat;
	}

}


(4)容器变更

以下以Tomcat->Jetty为例:

pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
    JettyEmbeddedServletContainerFactory container = new JettyEmbeddedServletContainerFactory();
    // Port Number
    container.setPort(8081);
    // Context Path
    container.setContextPath("/springboot");
    // Session Timeout
    container.setSessionTimeout(30);
    return container;
}


引用
2017-02-07 16:27:50.802  INFO 452 --- [           main] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8081 (http/1.1)
2017-02-07 16:27:50.805  INFO 452 --- [           main] c.r.s.SpringBootDemo4Application         : Started SpringBootDemo4Application in 2.172 seconds (JVM running for 2.67)


再次访问 http://localhost:8081/springboot/

(5)多容器配置

	@Bean
	public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {
		return new EmbeddedServletContainerCustomizer() {
			@Override
			public void customize(ConfigurableEmbeddedServletContainer container) {

				// Port Number
				if (TomcatEmbeddedServletContainerFactory.class.isAssignableFrom(container.getClass())) {
					TomcatEmbeddedServletContainerFactory tomcat =
							TomcatEmbeddedServletContainerFactory.class.cast(container);
					tomcat.setPort(8081);
				}
				if (JettyEmbeddedServletContainerFactory.class.isAssignableFrom(container.getClass())) {
					JettyEmbeddedServletContainerFactory jetty =
							JettyEmbeddedServletContainerFactory.class.cast(container);
					jetty.setPort(8082);
				}
				if (UndertowEmbeddedServletContainerFactory.class.isAssignableFrom(container.getClass())) {
					UndertowEmbeddedServletContainerFactory undertow =
							UndertowEmbeddedServletContainerFactory.class.cast(container);
					undertow.setPort(8083);
				}
				// Context Path
				container.setContextPath("/springboot");
				// Session Timeout
				container.setSessionTimeout(30, TimeUnit.MINUTES);
			}
		};
	}
分享到:
评论

相关推荐

    Spring Boot中使用LDAP来统一管理用户信息的示例

    本篇文章主要介绍了 Spring Boot 中使用 LDAP 来统一管理用户信息的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。下面我们将详细介绍 LDAP 的基础概念和在 Spring Boot 中如何使用 LDAP 来统一管理用户...

    Spring Boot 笔记1

    在本篇Spring Boot笔记中,我们将探讨Spring Boot的核心特性、如何创建一个简单的Spring Boot应用以及相关的Maven配置。Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建以及开发过程,提供了一种...

    spring boot入门篇demo+ppt

    1. **Spring Boot基础知识**:了解Spring Boot的基本概念,包括其设计目标、主要特性以及与其他Spring框架的关系。 2. **起步依赖(Starter)**:Spring Boot通过起步依赖提供了一种快速配置各种功能的方式,如Web...

    Spring boot(一): 入门篇.rar_springboot

    通过阅读 "Spring boot(一): 入门篇.pdf" 和 "Spring boot(二):web综合开发.pdf",你可以深入了解 Spring Boot 的基本概念、快速上手指南以及如何进行 Web 应用的综合开发。这些资料将引导你从初识 Spring Boot 到...

    [E文]Spring Boot 2 Recipes

    - **基础篇**:介绍 Spring Boot 的基本概念、安装和配置等基础知识。 - **进阶篇**:探讨如何利用 Spring Boot 构建复杂的应用程序,包括安全性和性能优化等方面。 - **实践篇**:提供一系列实战案例,涵盖微服务...

    Spring Boot核心技术-笔记

    本篇笔记将介绍Spring Boot的核心概念、微服务架构、环境准备、入门案例以及相关开发工具的配置方法。 1. Spring Boot简介 Spring Boot是由Pivotal团队提供的开源框架,它使用“约定优于配置”的原则,旨在简化...

    spring-boot-aws:部署到 Amazon AWS 的 Spring Boot Demo 应用程序

    本篇文章将深入探讨如何将一个基于 Spring Boot 的应用程序部署到 AWS 的 Elastic Beanstalk 平台上。 **Elastic Beanstalk 介绍** Elastic Beanstalk 是 AWS 提供的一种完全托管的服务,它允许开发者轻松部署和...

    Spring Boot和Vue.js的web商城系统源码.zip

    一、Spring Boot基础 Spring Boot是Spring框架的扩展,它简化了Spring应用的初始搭建以及配置过程。其核心特性包括自动配置、起步依赖和运行时嵌入式服务器,使得开发者能够快速启动项目。在我们的web商城系统中,...

    spring-boot-and-all-all-all

    《Spring Boot全方位解析:从入门到精通》 Spring Boot,作为Java生态系统中的明星框架,以其“开箱即用”的特性,极大地简化了Spring应用的初始搭建以及开发过程。本篇文章将深入探讨Spring Boot的核心概念、关键...

    spring-analysis-源码.rar

    Spring Boot简化了Spring应用的初始搭建和配置,它默认配置了许多常见的功能,如嵌入式Servlet容器、自动配置等,使得“起步运行”变得简单。 8. **Spring Cloud** Spring Cloud是基于Spring Boot的微服务生态,...

    SpringBoot.zip

    1. **Spring Boot基础知识**: - **起步依赖(Starters)**:Spring Boot通过一系列的起步依赖,如`spring-boot-starter-web`、`spring-boot-starter-data-jpa`等,帮助开发者快速引入所需功能模块。 - **嵌入式...

    spring boot https (1.0和2.0)

    Spring Boot 是一个流行的Java开发框架,它简化了创建生产级的、基于Spring的应用程序。集成HTTPS是Spring Boot项目中的一项重要安全配置,因为HTTPS能够确保数据传输的安全性,防止中间人攻击,保护用户隐私。本篇...

    SpringSecurity_day03.pdf

    本篇文档主要介绍了如何将Spring Security与Spring Boot进行集成,并实现基本的认证功能。具体的技术选型如下: - **Spring Boot 版本**: 2.1.3 - **Spring Security** - **数据库**: MySQL - **持久层框架**: ...

    Spring-Boot:Spring Boot框架的学习

    2. **嵌入式Web服务器**:Spring Boot支持内嵌Tomcat、Jetty或Undertow等Web服务器,无需额外部署到外部容器。 3. **自动配置**:Spring Boot根据类路径中的jar文件自动配置Spring容器。例如,如果类路径下有`...

    SpringBoot讲义.pdf

    #### 一、Spring Boot 快速入门及基础知识 - **Spring Boot 简介**: - **定义**:Spring Boot 是 Spring 家族中的一个新成员,旨在简化 Spring 应用的初始搭建以及开发过程。 - **优势**: - 自动配置:Spring ...

    Spring Boot 整合mybatis 与 swagger2

    例如,对于Spring Boot基础依赖、AOP支持以及Mybatis的集成,我们需要以下依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-aop &lt;!-- Mybatis 集成 --&gt; &lt;groupId&gt;org....

    初识java,用springBoot学习java

    2. **Spring Boot入门** - **自动配置**:Spring Boot的核心特性之一,根据项目依赖自动配置相关组件。 - **起步依赖**:通过引入特定的起步依赖(Starter POMs),可以快速引入所需功能模块,如spring-boot-...

    springboot全套学习资料.txt

    #### 一、Spring Boot基础篇 ##### 1.1 Spring Boot简介 - **定义**:Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化新Spring应用的初始搭建以及开发过程。 - **特点**: - 约定优于配置(Convention...

    128元尚硅谷Java视频教程_SpringBoot视频教程(上)核心技术篇

    02、尚硅谷_SpringBoot_入门-Spring Boot简介 03、尚硅谷_SpringBoot_入门-微服务简介 04、尚硅谷_SpringBoot_入门-环境准备 05、尚硅谷_SpringBoot_入门-springboot-helloworld 06、尚硅谷_SpringBoot_入门-...

    尚硅谷-springBoot3课程笔记

    - **嵌入式容器**:Spring Boot支持将Tomcat、Jetty等Web服务器内置到应用中,不需要独立部署。 - **依赖管理**:提供了一套依赖管理系统,开发者只需声明依赖,而不需要指定版本号。 - **外部配置**:支持外部配置...

Global site tag (gtag.js) - Google Analytics