springboot介绍

简介

spring boot可以轻松构建独立运行的,产品级的spring应用程序。其设计目的是简化Spring应用的初始搭建以及开发过程。把开发者从庞杂的配置中解放出来,将精力集中于业务开发上。

主要特性:

1、创建独立的Spring应用程序。

2、带嵌入型Tomcat/Jetty容器,无需部署WAR文件。

3、简化Maven配置。

4、自动化配置Spring。

5、提供生产就绪型功能,如指标,健康检查和外部配置。

6、绝对没有代码生成并且对XML也没有配置要求。

springboot的参考文档总体上组织地有些无头无绪,感觉是把该写的都写了,但又抓不住要领。

用一句话总结springboot的话,就是一个以spring为基础的快速构建框架,比spring还快,还轻。

扫描二维码关注公众号,回复: 3337057 查看本文章

建构工程

1、访问http://start.spring.io/

2、选择构建工具Maven Project、Spring Boot版本及一些工程信息,点击"Switch to the full version.",选择java版本及相关组件。

 

3、点击Generate Project生成项目压缩包。

工程目录

工程结构还是可以和普通的spring程序差不多。没有定规,随需要确定。

1、程序文件,src/main/java/

+- com

  +- example

    +- demo

      +- DemoApplication.java

      |

      +- domain

      |  - User.java

      |

      +- dao

      |  - UserDao.java

      |

      +- service

      |  - UserService.java

         +- impl

      |     - UserServiceImpl.java

      |

      +- controller

      |  - UserController.java

1)、DemoApplication.java,放到根目录,用于框架层面的配置。

2)、domain,业务实体类。

3)、dao,数据操作类(如果有ORM框架,就在这里写相应的配置)。

4)、service,业务服务类(接口及实现)。

4)、controller,页面访问控制。

2、资源文件,src/main/resouces

   +-  static,静态资源目录

   +-  templates,模板资源目录

   +-  application.properties(yml),全局配置文件

3、pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>



    <groupId>com.forezp</groupId>

    <artifactId>springboot-first-application</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>



    <name>springboot-first-application</name>

    <description>Demo project for Spring Boot</description>



    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.0.4.RELEASE</version>

        <relativePath />

    </parent>



    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <java.version>1.8</java.version>

    </properties>



    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>



        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

    </dependencies>



    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

</project>

其中spring-boot-starter-web不仅包含spring-boot-starter,还自动开启了web功能。

功能演示

创建controller:

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.RequestMapping;



@RestController

public class UserController {



    @RequestMapping("/")

    public String index() {

        return "Hello, Spring Boot.";

    }


}

 

启动DemoApplication,打开浏览器localhost:8080,浏览器显示:

Hello, Spring Boot.

启动springboot

cd到项目主目录:

mvn clean package  编译项目的jar

mvn spring-boot: run 启动

cd 到target目录,java -jar 项目.jar

启动时注入了哪些bean

在程序入口加入:

@SpringBootApplication

public class DemoApplication {



    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

    }



    @Bean

    public CommandLineRunner commandLineRunner(final ApplicationContext ctx) {

        return args -> {

            System.out.println("----Spring Boot注入的bean----");



            String[] beanNames = ctx.getBeanDefinitionNames();

            Arrays.sort(beanNames);

            for (String beanName : beanNames) {

                System.out.println("---beanName--" + beanName);

            }

        };

    }

}

程序输出:

basicErrorController

beanNameHandlerMapping

beanNameViewResolver

characterEncodingFilter

...

在程序启动的时候,springboot自动注入了40-50个bean。

单元测试

通过@RunWith(),@SpringBootTest开启:

@RunWith(SpringRunner.class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class HelloControllerIT {



    @LocalServerPort

    private int port;



    private URL base;



    @Autowired

    private TestRestTemplate template;



    @Before

    public void setUp() throws Exception {

        this.base = new URL("http://localhost:" + port + "/");

    }



    @Test

    public void getHello() throws Exception {

        ResponseEntity<String> response = template.getForEntity(base.toString(),

                String.class);

        assertThat(response.getBody(), equalTo("Hello, Spring Boot."));

    }

}

运行它会先开启sprigboot工程,然后再测试。

启动方式

springboot启动有多种方式。

方式1、作为java程序,运行Application类的main方法。

方式2、在应用根目录下,运行mvn spring-boot:run。

方式3、使用mvn depoly生成jar后运行。

先到项目根目录生成jar包。

mvn depoly

cd target

java -jar SpingBootApp01.jar

默认端口

有时可能需要启动不止一个SpringBoot,而SpringBoot默认端口是8080,所以需要修改。修改默认端口有几种方法。

方法1,修改application.properties。

在application.properties中:server.port=8004。

在SpringBoot中有一个类:ServerProperties。

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)

public class ServerProperties implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {

    // Server HTTP port.

    private Integer port;

类里有一个@ConfigurationProperties注解,会读取SpringBoot的默认配置文件application.properties的值注入到bean里。其中定义了一个server的前缀和一个port字段,在SpringBoot启动时会读取到server.port的值。

@Override

public void customize(ConfigurableEmbeddedServletContainer container) {

    if (getPort() != null) {

        container.setPort(getPort());

    }

customize方法会给SpringBoot设置读取到的端口号。

方法2,覆写customize方法

实现EmbeddedServletContainerCustomizer接口,并覆写customize方法。

@RestController

@EnableAutoConfiguration

@ComponentScan

public class FirstExample implements EmbeddedServletContainerCustomizer {

    @RequestMapping("/first.do")

    String home() {

        return "Hello World";

    }

 

    public static void main(String[] args) {

        SpringApplication.run(FirstExample.class, args);

    }

 

    @Override

    public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {

        configurableEmbeddedServletContainer.setPort(8003);

    }

}

方法3,使用命令行参数或JVM参数

用命令行参数在启动的时候修改。

java -jar SpringBootApp.jar --server.port=8000

或放到JVM参数里修改。

-Dserver.port=8009

停止

可通过HTTP发送shutdown信号或使用service stop的方式。

方式一:通过HTTP发送shutdown信号

主要依赖Spring Boot Actuator的endpoint特性,具体步骤如下:

1、在pom.xml中引入actuator依赖

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

2、开启shutdown endpoint

Spring Boot Actuator的shutdown endpoint默认是关闭的。

#启用shutdown

endpoints.shutdown.enabled=true

#禁用密码验证

endpoints.shutdown.sensitive=false

3、发送shutdown信号

shutdown的默认url为host:port/shutdown,当需要停止服务时,向服务器post该请求即可,如:

curl -X POST host:port/shutdown

将得到形如{"message":"Shutting down, bye..."}的响应。

4、启用安全设置

该方法非常方便远程操作,注意使用时,必须对该请求进行必要的安全设置,比如借助spring-boot-starter-security进行身份认证。

添加security依赖

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-security</artifactId>

</dependency>

开启安全验证

#开启shutdown的安全验证

endpoints.shutdown.sensitive=true

#验证用户名

security.user.name=admin

#验证密码

security.user.password=secret

#角色

management.security.role=SUPERUSER

指定路径、IP、端口

#指定shutdown endpoint的路径

endpoints.shutdown.path=/custompath

#也可以统一指定所有endpoints的路径`management.context-path=/manage`

#指定管理端口和IP

management.port=8081

management.address=127.0.0.1

方式二:部署为Unix/Linux Service

用spring-boot-maven-plugin创建"Fully executable"jar,这种jar包内置一个shell脚本,可以方便地将应用设置为Unix/Linux的系统服务(init.d service)。官方对该功能在CentOS和Ubuntu进行了测试,对于OS X和FreeBSD,可能需要自定义。具体步骤如下:

1、在pom.xml中引入插件:

<plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    <configuration>

        <executable>true</executable>

     </configuration>

</plugin>

2、设置为系统服务

将应用打成jar包,部署到服务器,假设部署路径为/var/app,包名为app.jar,通过如下方式将应该设置为一个系统服务:

sudo ln -s /var/app/app.jar /etc/init.d/app

3、赋予可执行权限:

chmod u+x app.jar

4、以系统服务的方式管理

使用service foo start|stop|restart启停应用。

sudo service app start|stop

得到形如Started|Stopped [PID]的结果反馈。

默认PID文件路径:/var/run/appname/appname.pid

默认日志文件路径:/var/log/appname.log

5、自定义参数

在这种方式下,还可以使用自定义的.conf文件来变更默认配置。

在jar包相同路径下创建一个.conf文件,名称与jar文件相同,如appname.conf。

在其中配置相关变量。

JAVA_HOME=/usr/local/jdk

JAVA_OPTS=-Xmx1024M

LOG_FOLDER=/custom/log

6、安全设置

为服务创建一个独立的用户,同时最好将该用户的shell绑定为/usr/sbin/nologin

赋予最小范围权限:chmod 500 app.jar

阻止修改:sudo chattr +i app.jar

对.conf文件做类似的工作:chmod 400 app.conf,sudo chown root:root app.conf。

猜你喜欢

转载自blog.csdn.net/casepk/article/details/81813056