SpringBoot入门笔记01-框架发展&零配置开发&核心配置&打包部署

目录

一、学习导图

二、Spring框架发展史

Spring1.x 时代

Spring2.x时代

Spring3.x到Spring4.x再到Spring5.x

Spring 5.X 应用零配置开发

三、注解

声明Bean 注解

注入Bean 注解

Spring5.x 中配置与获取Bean注解

实例1-Ioc中Bean的实例化与获取

创建Spring 普通工程并添加坐标相关配置

添加源代码 创建UserDao ,UserService Bean 对象

创建IocConfig配置类

创建启动类执行测试

@Bean注解使用

实例2-读取外部配置文件

准备properties 配置文件

@PropertySource加载properties配置文件

其他Bean对象获取properties文件内容

四、组合注解与元注解

自定义组合注解

应用组合注解

五、Spring MVC 零配置创建与部署

创建Spring Mvc Web工程

六、Spring Boot 概念&特点

框架概念

框架特点

Spring Boot快速入门

七、Spring Boot 核心配置  

自定义Banner与Banner关闭

Spring Boot 配置文件

Starter 坐标 & 自动化配置

Starter坐标配置

自动化配置

Spring Boot自动化配置  

 Profile 配置

 日志配置

项目中日志信息输出 

 日志输出格式配置

八、Freemarker & Thymeleaf视图技术集成

Freemarker 视图集成

Thymeleaf视图集成

SpringBoot 静态资源访问  

 九、SpringBoot应用打包与部署

Jar 包部署

配置打包命令

 部署并访问

war包部署  

pom.xml修改

Starter修改

部署并访问

 十、总结

一、学习导图

二、Spring框架发展史

Spring1.x 时代

        在Spring1.x 时代,都是通过 xml 文件配置 bean ,随着项目的不断扩大,需要将 xml 配置分放到不同的配置文件中,需要频繁的在java 类和 xml 配置文件中切换。

Spring2.x时代

        随着JDK 1.5带来的注解支持, Spring2.x 可以使用注解对 Bean 进行申明和注入,大大的减少了 xml配置文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
        1. 应用的基本配置 xml ,比如:数据源、资源文件等;
        2. 业务开发用注解,比如: Service 中注入 bean 等;

Spring3.xSpring4.x再到Spring5.x

        从Spring3.x 开始提供了 Java 配置方式,使用 Java 配置方式可以更好的理解你配置的 Bean ,现在我们就处于这个时代,并且Spring4.x Spring5.x Spring Boot 都推荐使用 java 配置的方式。

Spring 5.X 应用零配置开发

        Spring 框架从 5.x 版本推荐使用注解形式来对 java 应用程序进行开发与配置 , 并且可以完全替代原始的XML+ 注解形式的开发 , 在使用注解形式进行项目开发与环境配置时, Spring 框架提供了针对环境配置与业务bean 开发相关注解。

三、注解

声明Bean 注解

@Component : 组件,没有明确规定其角色,作用在类级别上声明当前类为一个业务组件,被 Spring Ioc 容器维护;
@Service : 在业务逻辑层( Service 层)类级别进行声明 ;
@Repository : 在数据访问层 (dao ) 类级别声明 ;
@Controller : 在展现层 (MVC) 使用 标注当前类为一个控制器

注入Bean 注解

@AutoWired : Spring 官方提供注解
@Inject : JSR-330 提供注解(标准制定方)
@Resource : JSR-250 提供注解
        以上三种注解在Set 方法或属性上声明,一般情况下通用一般开发中更习惯声明在属性上,代码简洁清晰。基于5.x 注解配置方式简化了xml 配置,应用程序开发与xml 环境配置均通过相应注解来实现。

Spring5.x 中配置与获取Bean注解

@Configuration : 作用与类上,将当前类声明为一个配置类,相当于一个 xml 配置文件
@ComponentScan : 自动扫描指定包下标注有 @Repository,@Service,@Controller
@Component : 注解的类并由 Ioc 容器进行实例化和维护
@Bean : 作用于方法上 , 相当于 xml 文件中 <bean> 声明当前方法返回值为一个 bean
@Value : 获取 properties 文件指定 key value

实例1-IocBean的实例化与获取

创建Spring 普通工程并添加坐标相关配置

<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>utf-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>

添加源代码 创建UserDao ,UserService Bean 对象

// UserDao.java
@Repository
public class UserDao {
    public void test(){
        System.out.println("UserDao.test...");
    }
}
// UserService.java
@Service
public class UserService {
    @Resource
    private UserDao userDao;
    public void test(){
        System.out.println("UserService.test...");
        userDao.test();
    }
}

创建IocConfig配置类

// Ioc 容器配置 Java 代码实现
@Configuration
@ComponentScan("com.xxxx.springboot")
public class IocConfig {
}

创建启动类执行测试

    public class Starter {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext ac=new
                    AnnotationConfigApplicationContext(IocConfig.class);
            UserService userService= ac.getBean(UserService.class);
            userService.test();
        }
    }
        此时启动Spring Ioc 容器通过实例化 AnnotationConfigApplicationContext 类,接收配置参数类IocConfig, 并获取 UserService Bean 实现方法调用 , 此时应用环境不存在 xml 配置文件,简化了应用的xml配置。
        使用@Bean 注解声明在方法 ( 注意 : 方法名一般为 bean 对象名称 ) 级别用于返回实例化的 Bean 对象。

@Bean注解使用

        定义AccountDao对象,并交给Spring Ioc 容器进行实例化。

// 注意 此时类级别并未添加 @Repository 注解
public class AccountDao {
    public void test(){
        System.out.println("AccountDao.test...");
    }
}
修改IocConfig 配置类中添加返回AccountDao Bean对象方法
@Configuration
@ComponentScan("com.xxxx.springboot")
public class IocConfig {
// 返回实例化的单例Bean对象
@Bean
public AccountDao accountDao(){
    return new AccountDao();
    }
}
UserService 中注入 AccountDao 对象
@Service
public class UserService {
@Resource
private UserDao userDao;
@Resource
private AccountDao accountDao;

public void test(){
    System.out.println("UserService.test...");
    userDao.test();
    accountDao.test();
    }
}
执行测试
public class Starter {
            public static void main(String[] args) {
                AnnotationConfigApplicationContext ac=new
                        AnnotationConfigApplicationContext(IocConfig.class);
                UserService userService= ac.getBean(UserService.class);
                userService.test();
                System.out.println(ac.isSingleton("accountDao"));
            }
}

实例2-读取外部配置文件

        在开发Java web 应用进行时 , 配置文件是比较常见的,比如 xml,properties,yml 等文件,在 Spring 应用中对于配置文件的读取同样提供支持。对于配置文件读取,我们可以通过@PropertySource 注解声明到类级别来指定读取相关配置配置。
        Spring El表达式语言,支持在 Xml 和注解中使用表达式,类似于 JSP EL 表达式, Spring 框架在借助该表达式实现资源注入,主要通过@Value 注解来使用表达式,通过 @Value 注解,可以实现普通字符串,表达式运算结果,Bean 属性文件内容,属性文件等参数注入。具体使用如下:

准备properties 配置文件

src/main/resources 目录下添加 user.properties jdbc.roperties 文件
# user.properties
user.userName=admin
user.password=admin

# jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/hr?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

@PropertySource加载properties配置文件

@Configuration
@ComponentScan("com.xxx")
@PropertySource(value =
        {"classpath:jdbc.properties","classpath:user.properties"})
public class IocConfig {
    @Value("${jdbc.driver}")
    private String url;
    @Value("${jdbc.url}")
    private String driver;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public AccountDao accountDao(){
        return new AccountDao();
    }
    // 控制台打印属性值信息
    public void showConfigInfo(){
        System.out.println("driver:"+driver+":url:"+url);
        System.out.println(":userName:"+userName+":password:"+password);
    }
}

其他Bean对象获取properties文件内容

public class UserService {
    @Resource
    private UserDao userDao;
    @Value("${user.userName}")
    private String userName;
    @Value("${user.password}")
    private String userPwd;
    public void test(){
        System.out.println("UserService.test...");
        userDao.test();
        System.out.println("userName:"+userName+":password:"+userPwd);
    }

}
启动 Starter 查看控制台输出内容效果

四、组合注解与元注解

        从Spring2开始,为了响应JDK1.5推出的注解功能,Spring开始大量加入注解来替代xml配置。Spring的注解主要用来配置注入Bean,切面相关配置(@Transactional)。随着注解的大量使用,尤其相同的多个注解用到个各类中会很繁琐。这就是所谓的末班代码,是Spring设计原则中要消除的代码。

        元注解就是可以注解到别的注解上的注解,被注解的注解称之为组合注解,组合注解具备元注解的功能。Spring本身已经有很多组合注解,比如在定义配置类时用到的 @Configuration 注解就是组合注解,拥有Component 注解功能,即配置类本身也是一个被Ioc维护的单例Bean

自定义组合注解

        定义MyCompScan 注解,拥有@ComponentScan 扫描器注解功能。

/**
 * 组合注解MyCompScan 定义
 * 拥有元注解@Configuration + @ComponentScan 两者功能
 * 覆盖value 属性
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Configuration
@ComponentScan
public @interface MyCompScan {
    String[] value() default {};    //复写@ComponentScan的value
}

应用组合注解

@MyCompScan("com.xxxx.springboot")
@PropertySource(value =
        {"classpath:jdbc.properties","classpath:user.properties"})
public class IocConfig02 {
    @Value("${jdbc.driver}")
    private String url;
    @Value("${jdbc.url}")
    private String driver;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public AccountDao accountDao(){
        return new AccountDao();
    }
    public void showConfigInfo(){
        System.out.println("driver:"+driver+":url:"+url);
        System.out.println(":userName:"+userName+":password:"+password);
    }
}
测试组合注解
public class Starter {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac=new
                AnnotationConfigApplicationContext(IocConfig02.class);
        UserService userService= ac.getBean(UserService.class);
        userService.test();
        System.out.println(ac.isSingleton("accountDao"));
        IocConfig iocConfig=ac.getBean(IocConfig.class);
        iocConfig.showConfigInfo();
    }
}

五、Spring MVC 零配置创建与部署

        基于Spring Mvc 5.X 使用 Maven 搭建 SpringMvc Web 项目 , 通过 Spring 提供的注解与相关配置来对项目进行创建与部署。

创建Spring Mvc Web工程

pom.xml添加坐标相关配置

        <!-- spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
        <!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
        <!-- web servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<build>
<finalName>springmvc</finalName>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>utf-8</encoding>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.4.27.v20200227</version>
    </plugin>
</plugins>
</build>
添加源代码
@Controller
public class HelloController {
    @RequestMapping("/index")
    public String index(){
        return "index";
    }
}
添加视图
WEB-INF/views 目录下创建 index.jsp (这里以 jsp 为模板)
<html>
<head>
    <title>Title</title>
</head>
<body>
        test web mvc
</body>
</html>

SpringMvc配置类添加

        Spring Mvc 配置信息 MvcConfig 文件添加 , 作为 Mvc 框架环境,原来是通过 xml 来进行配置 ( 视图解析器,Json 转换器,文件上传解析器等 ) ,这里基于注解通过继承 WebMvcConfigurerAdapter 类并重写相关方法来进行配置( 注意通过 @EnableWebMvc 注解来启动 MVC 环境 )
        
@Configuration
@ComponentScan("com.msb.springboot")
@EnableWebMvc
public class MvcConfig {
    @Bean
    public InternalResourceViewResolver viewResolver(){ //视图解析器
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}
        MvcConfig 类定义好了,那么问题来了,怎么加载 MvcConfig 类呢,原来在构建 Mvc 应用时是通过容器启动应用时加载web.xml 文件 实现配置文件加载,现在的环境 web.xml 文件不存在,此时基于注解方式构建的Mvc 应用,定义 WebInitializer 实现 WebApplicationInitializer 接口 ( 该接口用来配置Servlet3.0+配置的接口,用于替代 web.xml 配置 ) ,当 servlet 容器启动 Mvc 应用时会通过
SpringServletContainerInitializer 接口进行加载 从而加载 Mvc 应用信息配置。实现该接口 onStartup
方法 ,加载应用信息配置。
入口文件代码添加
public class WebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // 注册Mvc 配置信息
        ctx.register(MvcConfig.class);
        // 设置ServletContext 上下文信息
        ctx.setServletContext(servletContext);
        // 配置转发器Dispatcher
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");

        // 启动时即实例化Bean
        servlet.setLoadOnStartup(1);
    }
}
部署与测试 :通过tomcat 启动项目并访问
        当项目访问成功后,那么问题来了,如果项目中存在静态资源文件,Handler 放行处理该如何配置, 定义的拦截器怎么应用,此时关注WebMvcConfigurationSupport 父类方法,重写相关方法即可。

六、Spring Boot 概念&特点

框架概念

        随着动态语言流行(Ruby,Scala,NodeJs ) Java 开发变得相对笨重,配置繁琐,开发效率低下,部署流程复杂,以及第三方集成难度也相对较大,针对该环境,Spring Boot 被开发出来,其使用 习惯大于配置目标”, 借助 Spring Boot 能够让项目快速运行起来,同时借助 Spring Boot 可以快速创建 web 应用并独立进行部署(jar war 包方式,内嵌 servlet 容器 ) ,同时借助 Spring Boot 在开发应用时可以不用或很少去进行相关xml 环境配置,简化了开发,大大提高项目开发效率。
        Spring Boot是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,让Spring Boot 在蓬勃发展的快速应用开发领域 (rapid application development) 成为领导者。

框架特点

        创建独立Spring 应用程序、嵌入式 Tomcat Jetty 容器、无需部署 WAR 包、简化 Maven Gradle 配置、尽可能自动化配置Spring 、直接植入产品环境下的实用功能,比如度量指标、健康检查及扩展配置、无需代码生成及XML 配置等,同时 Spring Boot 不仅对 web 应用程序做了简化,还提供一系列的依赖包来把其它一些工作做成开箱即用。

Spring Boot快速入门

环境 :Idea Maven Jdk 1.8+ Spring Boot 2.x
创建 Maven 普通项目
添加依赖坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
        Spring Boot的项目必须要将 parent 设置为 Spring Boot parent ,该 parent 包含了大量默认的配置,简化程序的开发。
导入 Spring Boot web 坐标与相关插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
添加源代码
@Controller
public class HelloController {
    @RequestMapping("hello")
    @ResponseBody
    public String hello() {
        return "hello spring boot";
    }
}
创建启动程序
HelloController.java 所在包下创建 StarterApplication.java
@SpringBootApplication
public class StarterApplication
{
    public static void main(String[] args) {
        SpringApplication.run(Starter.class);
    }
}
启动 Spring Boot 应用并测试

七、Spring Boot 核心配置  

自定义BannerBanner关闭

Banner 图标自定义
        Spring Boot项目启动时默认加载 src/main/resources 目录下的banner.txt 图标文件 , 如果该目录文件未提供, 则使用 Spring Boot 默认图标打印在 main 目录下新建 resources 资源目录 , 并在该目录下新建 banner.txt 文本文件。
打开网址: http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20
在线生成图标对应文本并将文本内容 copy banner.txt
Banner 图标关闭
        如果启动时不想要看到启动图标 ,这里也可以通过代码进行关闭操作, 修改 StarterApplication 设置 BannerMode值为 Banner.Mode.OFF, 启动 Spring Boot 应用关闭图标输出功能即可。
@SpringBootApplication
public class StarterApplication {
    public static void main(String[] args) {
        SpringApplication springApplication=new
                SpringApplication(StarterApplication .class);
// 设置banner 图标关闭
        springApplication.setBannerMode(Banner.Mode.OFF);
        springApplication.run();
    }
}

Spring Boot 配置文件

        Spring Boot 默认会读取全局配置文件,配置文件名固定为 :application.properties
application.yml ,放置在 src/main/resources 资源目录下 , 使用配置文件来修改 SpringBoot 自动配置的默认值;
resources 资源目录下添加 application.properties 文件 , 配置信息如下 :
## 项目启动端口号配置
server.port=8989
## 项目访问上下文路径
server.servlet-path=/mvc
## 数据源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/hr?
useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
或者application.yml 文件
## 端口号 上下文路径
server:
  port: 8989
  servlet:
    context-path: /mvc
## 数据源配置
spring:
  datasource:
    type: com.mchange.v2.c3p0.ComboPooledDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/hr
    username: root
    password: root

Starter 坐标 & 自动化配置

Starter坐标配置

        Spring Boot 引入了全新的 Starter 坐标体系,简化企业项目开发大部分场景的 Starter pom, 应用程序引入指定场景的Start pom 相关配置就可以消除 ,通过 Spring Boot 就可以得到自动配置的 Bean

Web starter

使用Spring MVC来构建RESTful Web应用,并使用Tomcat作为默认内嵌容器。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
Freemarker Starter & Thymeleaf starter
集成视图技术,引入 Freemarker Starter ,Thymeleaf Starter
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
JavaMail 邮件发送 Starter
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
引入 AOP 环境
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
需要引入相关 starter 坐标可以到 这里 搜索。

自动化配置

SpringBoot Starter 坐标版本查看
        前面介绍了SpringBoot Starter 相关坐标,引入 Starter 坐标来简化应用环境的配置。这里以环境搭建spring-boot-starter-web 坐标来简单分析 SpringBoot 自动化配置过程。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
        这里引入的web 环境坐标不像传统的 maven 坐标那样包含坐标的版本号,项目中引入的 starter 系列坐标对应的版本库统一由父工程坐标统一控制即项目中引入的parent标签。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <!--
    父类项目统一对项目依赖版本统一控制!
    -->
    <version>2.2.2.RELEASE</version>
</parent>
        这里spring-boot-starter-parent 继承spring-boot-dependencies 项目 , spring-boot-dependencies 项目中定义了spring-boot-starter-web 坐标的版本 ! spring-boot-dependencies 项目中定义了当前 SpringBoot版本下各个 starter 坐标版本以及依赖的其他坐标版本)

 

Spring Boot自动化配置  

        Spring Boot的项目一般都会有 Application 的入口类,入口类中提供 main 方法,这是一个标准的 Java应用程序的入口方法。 @SpringBootApplication 注解是 Spring Boot 的核心注解,它其实是一个组合注解:
        

         可以看出该注解也是一个组合注解,组合了@Configuration注解,对于Spring Boot应用,

@SpringBootConfiguration 注解属于 Boot 项目的配置注解也是属于一个组合注解, Spring Boot 项目中推荐使用@SpringBootConfiguration 注解 , 因为其组合了 @Configuration 注解。

@EnableAutoConfiguration 注解组合了 @AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class) 注解。
        @AutoConfigurationPackage底层也是一个 @Import(AutoConfigurationPackages.Registrar.class),其会把启动类的包下组件都扫描到 Spring 容器中。

 

 

 Profile 配置

        Profile 是 Spring 用来针对不同环境对不同配置提供支持的全局 Profile 配置使用 application-
{profile}.yml ,比如 application-dev.yml ,application-test.yml
        通过在application.yml 中设置 spring.profiles.active=test|dev|prod 来动态切换不同环境 , 具体配置如下:

 

 

 日志配置

        在开发企业项目时,日志的输出对于系统bug 定位无疑是一种比较有效的方式,也是项目后续进入生产环境后快速发现错误解决错误的一种有效手段,所以日志的使用对于项目也是比较重要的一块功能。
        Spring Boot默认使用 LogBack 日志系统,如果不需要更改为其他日志系统如 Log4j2 等,则无需多余的配置,LogBack 默认将日志打印到控制台上。如果要使用 LogBack ,原则上是需要添加
dependency 依赖的。
        

项目中日志信息输出 

Starter 启动类中添加Log 日志类,控制台打印日志信息。

package com.xxxx;
        import org.slf4j.Logger;
        import org.slf4j.LoggerFactory;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Starter {
    private static Logger logger = LoggerFactory.getLogger(Starter.class);
    public static void main(String[] args) {
        logger.info("SpringBoot 应用开始启动...");
        SpringApplication.run(Starter.class);
    }
}

 日志输出格式配置

        修改application.yml 文件添日志输出格式信息配置,可以修改 application.yml 文件来控制控制台日志输出格式,同时可以设置日志信息输出到外部文件。

 更多日志输出,参考官网

八、Freemarker & Thymeleaf视图技术集成

Freemarker 视图集成

        SpringBoot内部支持 Freemarker 视图技术的集成,并提供了自动化配置类
FreeMarkerAutoConfiguration ,借助自动化配置可以很方便的集成 Freemarker 基础到 SpringBoot 环境中。这里借助入门项目引入Freemarker 环境配置。

 

编写IndexController 控制器转发视图 

@Controller
public class IndexController {
    @RequestMapping("index")
    public String index(){
        return "index";
    }
}

Thymeleaf视图集成

        SpringBoot 支持多种视图技术集成 , 并且 SpringBoot 官网推荐使用 Thymeleaf 作为前端视图页
面,这里实现 Thymeleaf 视图集成,借助入门项目引入 Thymeleaf 环境配置。

 编写IndexController 控制器转发视图

@Controller
public class IndexController {
    @RequestMapping("index")
    public String index(Model model){
        model.addAttribute("msg","hello SpringBoot ");
        return "index";
    }
}

SpringBoot 静态资源访问  

 九、SpringBoot应用打包与部署

        当项目开发完毕进行部署上线时,需要对项目进行打包操, 入门中构建的项目属于普通应用,由于 SpringBoot内嵌 Tomcat 容器 , 所有打包后的 jar 包默认可以自行运行。

Jar 包部署

配置打包命令

idea 下配置 clean compile package -Dmaven.test.skip=true 执行打包命令, target 目录得到待部
署的项目文件。

 部署并访问

war包部署  

        War 包形式部署 Web 项目在生产环境中是比较常见的部署方式,也是目前大多数 web 应用部署的方案,这里对于Spring Boot Web 项目进行打包部署步骤如下:

pom.xml修改

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<build>
<!--
配置生成的war文件名
-->
<finalName>springboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

Starter修改

        添加容器启动加载文件( 类似于读取 web.xml), 这里通过继承 SpringBootServletInitializer 类并重写 configure方法来实现,在部署项目时指定外部 tomcat 读取项目入口方法。
@SpringBootApplication
public class Starter extends SpringBootServletInitializer {
    private static Logger logger = LoggerFactory.getLogger(Starter.class);
    public static void main(String[] args) {
        logger.info("SpringBoot 应用开始启动...");
        SpringApplication.run(Starter.class);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder
    builder) {
        return builder.sources(Starter.class);
    }
}

部署并访问

 

 十、总结

  • 使用 SpringBoot框架的最终目标是简化原生的Spring应用开发带来的繁琐配置,SpringBoot引入的全新的 Starter坐标简化了原有坐标的引入方式,借助SpringBoot的自动化配置让开发者面更加专注业务本身的开发,而不是花费大量的时间来解决配置的问题
  • SpringBoot还提供了便捷的环境切换操作,做到不同环境方便快捷的切换,在开发web项目中遇到的视图整合与静态文件的访问操作,更多要归功于SpringBoot本身Starter坐标与自动化配置功能
  • SpringBoot打包与部署相比较原有的Maven项目打包与部署简化了很多

其他参考资料

Spring Boot是什么

SpringBoot到底是什么? - 知乎

springboot项目打包与部署_springboot assembly父工程打包_蜗牛很着急的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值