zoukankan      html  css  js  c++  java
  • [Spring] 学习Spring Boot之一:基本使用及简析

    一、简介

    使用 Spring Boot 目的主要是用来简化 Spring 应用的搭建及开发过程,因为使用 Spring 及 SpringMVC 框架时需要手动配置的地方非常多(各种包之间的依赖、各种配置)。有一句话叫“约定大于配置”,即有些地方应该设置合理的默认值,减少手动配置,而使用 Spring Boot 可以让 Spring 项目只需要很少的配置就能运行。

    另外 Spring Boot 内嵌了 Web 服务器 (Tomcat/Jetty) 的可执行框架,即项目不需要打成 war 包部署到 Web 服务器中,而是打成 jar 直接放到服务器运行即可(通过 java -jar xx.jar 运行)。Spring Boot 比较适合微服务部署方式,不再把一堆项目放到一个 Web 服务器下,而是每个项目独立使用一个 Web 服务器,使重启和更新都很容易。

    二、创建一个 Spring Boot 的 Web 项目

    首先使用 IntelliJ IDEA 创建一个项目,选择 Spring Initializr,如图:

    点击 Next 后,填写项目信息,如图:

    点击 Next 后,选择 Spring Boot 版本,并勾选 Web 选项,如图:

    点击 Next 后,填写项目名称,点击 finish 创建。在项目中 src/main/java 目录下可以看到一个 artifactId+Application 命名规则的类,这个类是整个项目的入口类,运行它就可以启动我们的 Web 项目,如图:

    在入口类中,有一个 @SpringBootApplication 注解,目的是开启 Spring Boot 的自动配置。在运行该类之前,先给我们的 Web 项目添加一个 Controller 类,以便后续访问,如图:

    运行入口类启动项目,然后我们就可以通过浏览器访问了,如图:

    三、使用 thymeleaf 做动态页面

    Spring Boot 推荐我们使用 thymeleaf 模版完全替代 JSP,好处是可以使用后缀为 html 的页面,浏览器能直接解析它,静态运行。它使用 html 标签,只是在标签里增加额外的属性,来达到展示数据的效果。当我们创建好项目后可以看到,在 resource 目录下已经创建好了两个目录,其中 static 用来存放一些静态资源,而 templates 用来存放模版页面,如下图:

    我们创建一个 html 页面,并加入以下内容:

    修改 HomeController 的代码,将 @RestController 注解换为 @Controller 注解 (@RestController = @Controller + @ResponseBody),如图:

    另外还需要在 pom 文件中引入 thymeleaf 依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    再次运行项目,通过浏览器访问,得到如下效果:

    上述过程中我们并没有配置视图解析器,因为 Spring Boot 中有默认配置:

    页面默认的映射路径为 classpath:/templates/*.html

    静态资源的映射路径为 classpath:/static/

    四、Spring Boot的配置文件

    Spring Boot 的配置文件是 application.properties,在 src/main/resources 目录下,如图:

    除了此文件外 Spring Boot 也支持 yaml 语言的配置文件 application.yml,下面以 application.properties 为例来进行配置(点击查看官方 application-properties 配置文档)。

    1、修改端口和访问路径

    server.context-path=/test 
    server.port=8081

    2、日志配置

    Spring Boot 默认使用 Logback 日志框架,我们可以手动配置日志级别级日志输出位置:

    logging.file=/home/workspace/log.log
    logging.level.org.springframework.web=debug

    3、Profile配置

    我们在 src/main/resources 目录下创建两个文件:application-dev.properties 和 application-prod.properties,分别用来表示开发环境和生存环境的配置,然后在 application.properties 中设置 spring.profiles.active 指定使用哪个 Profile,如使用开发环境的配置:

    spring.profiles.active=dev

    4、常规属性值配置

    在配置文件中进行如下配置:

    tyh.name="滕云浩"
    tyh.specialities="信息管理与信息系统"

    并且还需要处理中文乱码问题:

    server.tomcat.uri-encoding=UTF-8
    spring.messages.encoding=UTF-8
    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true

    然后在变量中利用 @Value 注解进行注入,使用时可省略 value,如下:

    @Value(value = "${tyh.name}")
    private String name;
    @Value("${tyh.specialities}")
    private String specialities;

    五、入口类简析

    我们创建一个 Spring Boot 项目后会自动生成一个入口类,入口类中包含一个 main 方法,通过这个我们来启动 Web 项目,如图:

    可以看到在入口类中有一个 @SpringBootApplication 注解,其源码如下:

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
            @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
            @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {
    
        /** 排除一些类,使其不会被自动配置,如 DataSource、DataSourceTransactionManager 等 */
        @AliasFor(annotation = EnableAutoConfiguration.class)
        Class<?>[] exclude() default {};
    
        /** 根据类名排除一些类,使其不会被自动配置 */
        @AliasFor(annotation = EnableAutoConfiguration.class)
        String[] excludeName() default {};
    
        /** 当 SpringBootApplication 启动时,会默认扫描入口类所在包及其子包,如果需要扫描其它包可以在此配置 */
        @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
        String[] scanBasePackages() default {};
    
        /** 同上 */
        @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
        Class<?>[] scanBasePackageClasses() default {};
    
    }
  • 相关阅读:
    ViewGroup和View
    十二、Android UI开发专题(转)
    十一、Android学习笔记_AsyncQueryHandler的应用
    十、Notepad++正则表达式使用
    九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出
    八、android jni 之C语言基础
    七、Android学习笔记_JNI hello world
    六、Android学习笔记_JNI_c调用java代码
    五、PackageManager获取版本号
    四、 Android之手机屏幕朝向
  • 原文地址:https://www.cnblogs.com/tengyunhao/p/8566039.html
Copyright © 2011-2022 走看看