spring boot入门指南(来自官网入门指南)

1. spring boot 可以使你通过很小的前期配置尽可能快的启动和运行项目,spring boot用自己的观点来创建产品已有的应用
2. 启动:
    使用spring boot创建一个应用:
        本指南提供了spring boot如何帮助你加快和促进应用的开发。和你看过的其他启动指南一样,在本指南中你会看到更多spring boot的使用案例。
        意味着给你一个更快的spring boot体验。如果你想要创建自己的spring boot项目,访问Spring Initializr,填写你的详细项目信息,选择你的
        选项,你可以下载maven构建文件,或将一个打包的项目作为zip文件下载。
    你将要创建什么:
        你将要使用spring boot创建一个简单的web应用并给他添加一些有用的而服务。
    你需要什么:
        大约15分钟
        一个喜爱的文本编辑器或集成开发环境
        1.8或以上JDK
        Gradle 4+ 或 Maven 3.2+
        你也可以直接将代码导入你的集成开发环境:
            Spring Tool Suite (STS)
            IntelliJ IDEA
    如何完成这次引导:
        和其他的spring启动指南一样,你可以从头开始一步步的完成也可以跳过已经熟悉的基本步骤。无论以那种方式,最终都是使代码正常运行。
        如果从头开始,请移步到Build with Gradle.
        如果要跳过基础操作,执行以下步骤:
            下载和解压本指南的源码库,或使用git下载:
                git clone https://github.com/spring-guides/gs-spring-boot.git
                切换进入gs-spring-boot/initial
                向前跳到[initial].
        如果你已经完成以上步骤,请将你的操作结果与gs-spring-boot/complete中的代码进行对比。
    使用maven创建:
        你首先要设置一个基本构建脚本。你可以使用任何你喜欢的构建系统来构建spring应用,但是你要运行的代码必须包含maven。如果你不熟悉maven,
        可以参考Building Java Projects with Maven。
        创建目录结构:
            src
            |-main
                |-java
                    |-hello
                    
        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>org.springframework</groupId>
            <artifactId>gs-spring-boot</artifactId>
            <version>0.1.0</version>

            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.0.3.RELEASE</version>
            </parent>

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

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


            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>

        </project>
        
        spring boot maven插件-spring-boot-maven-plugin提供了许多方便的特性:
            它集合了类路径中所有jar,创建了一个单一的可运行的"über-jar",使得你的服务更方便的执行和传输。
            它查找public static void main()方法作为启动类
            它提供了一个内置依赖解析器来设置与spring boot的依赖相匹配的版本号。无论你覆盖你想要的任何版本,都会被重置为为Boot选择的默认
            版本设置。
    使用ide创建:    
        直接去Spring Tool Suite获取如何直接导入guide项目
        从IntelliJ IDEA中获取如何运行guide项目
    学习你可以用spring boot干什么:
        spring boot提供了一种快速创建应用的方式。他会查看你的类路径和你已经配置的bean,并对你缺少的内容作出合理的假设,并添加它。使用
        spring boot您可以更多的关注业务特性,而较少的关注基础设施。
        例如:
            spring mvc中对于你总是用到的一些特定的bean,spring boot会自动添加。一个Spring MVC需要servlet容器,spring boot会自动配置嵌入式
            comcat
            如果你需要jetty而不是tomcat,spring boot会自动嵌入jetty。
            Thymeleaf?一些必须总是添加到上下文中的bean,spring boot会自动为您添加。
        这些只是spring boot提供自动配置的几个例子。与此同时,spring boot不会影响你的操作。例如,如果Thymeleaf在你的路径下,spring boot会自动的在你的应用上下文中提供一个SpringTemplateEngine。如果你用自己的配置文件定义了自己的SpringTemplateEngine,spring boot就不会再添加了。这可以使你在你的角色上付出很少的努力。
        
        spring boot不会生成代码或编辑你的文件。相反,当你启动应用时,spring boot会动态的的连接bean和设置,并将它们应用到你应用程序的上下文中。
        
        创建一个简单的web应用:
            现在你可以为一个简单的web应用创建一个web控制器。
                package hello;

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

                @RestController
                public class HelloController {

                    @RequestMapping("/")
                    public String index() {
                        return "Greetings from Spring Boot!";
                    }

                }
                
                这个类被标记为@RestController,意味着它已经准备好被spring mvc使用来处理web请求。@RequestMapping映射“/”到index()方法。当从浏览器或命令行的curl调用index()方法时,该方法会返回纯文本。
                那是因为@RestController结合了@Controller和@ResponseBody,这两个注解会导致web请求返回数据而不是视图。
            
            创建一个应用类:
                在这里你用组件创建一个应用类:
                    package hello;

                    import java.util.Arrays;

                    import org.springframework.boot.CommandLineRunner;
                    import org.springframework.boot.SpringApplication;
                    import org.springframework.boot.autoconfigure.SpringBootApplication;
                    import org.springframework.context.ApplicationContext;
                    import org.springframework.context.annotation.Bean;

                    @SpringBootApplication
                    public class Application {

                        public static void main(String[] args) {
                            SpringApplication.run(Application.class, args);
                        }

                        @Bean
                        public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
                            return args -> {

                                System.out.println("Let's inspect the beans provided by Spring Boot:");

                                String[] beanNames = ctx.getBeanDefinitionNames();
                                Arrays.sort(beanNames);
                                for (String beanName : beanNames) {
                                    System.out.println(beanName);
                                }

                            };
                        }

                    }
                
                    @SpringBootApplication是一个方便的添加了以下所有内容的注解:
                        @Configuration标记本类作为应用上下文bean定义的来源
                        @EnableAutoConfiguration告诉spring boot开始基于类路径,其他bean和各种属性设置添加bean。
                        通常你会为spring mvc应用添加@EnableWebMvc,但是spring boot在类路径中看到spring-webmvc时就会将它自动添加上。
                        会把应用程序标记为web应用,并激活诸如设置DispatcherServlet之类的关键行为。
                        @ComponentScan告诉spring去寻找hello包中的其他组件、配置和服务,让他能够找到控制器。
                    
                    main()方法通过使用spring boot的SpringApplication.run()方法启动应用,你有没有注意到其中一行xml代码都没有?也没有web.xml文件。这个web应用是100%纯java,您不需要处理任何管道和基础设施的配置。
                    
                    这里也有一个标记为@Bean的CommandLineRunner方法在启动时运行。它会检查所有的你的应用创建的或是spring boot创建的bean,给他们排序并打印出来。
                    
            运行应用:
                    如果你使用maven,运行:mvn package && java -jar target/gs-spring-boot-0.1.0.jar
                    从输出中你会清晰的看到org.springframework.boot.autoconfigure这个bean
                    也会看到tomcatEmbeddedServletContainerFactory。
                    检验服务:
                        $ curl localhost:8080
                        Greetings from Spring Boot!
        
        添加单元测试:
            您希望为您添加的端点添加一个测试,spring测试已经提供了一些机制,可以很容易的包含到您的项目中。
            
            如果你使用maven,将以下内容添加到依赖列表中:
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
                </dependency>
            现在写一个简单的单元测试,通过你的终端模拟sevlet的请求和响应:
                @RunWith(SpringRunner.class)
                @SpringBootTest
                @AutoConfigureMockMvc
                public class HelloControllerTest {

                    @Autowired
                    private MockMvc mvc;

                    @Test
                    public void getHello() throws Exception {
                        mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
                                .andExpect(status().isOk())
                                .andExpect(content().string(equalTo("Greetings from Spring Boot!")));
                    }
                }
                
                MockMvc来自于Spring Test,并且允许你通过一组建造者类对DispatcherServlet发送HTTP请求并对结果进行断言。
                @AutoConfigureMockMvc和@SpringBootTest结合在一起注入一个MockMvc实例。我们使用@SpringBootTest创建整个应用上下文。
                另一种方法是使用@WebMvcTest告诉spring boot只创建上下文的web层。spring boot在任何情况下都能够自动定位主应用程序,
                但是如果你想要创建一些不同的应用,你可以覆盖或缩减它。
                
            和模拟http请求一样,我们可以使用spring boot写一个简单的全栈集成测试。例如,我们可以这样做:
                @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("Greetings from Spring Boot!"));
                    }
                }    
                
                这个嵌入式服务器借助webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT在随机端口上启动,
                使用@LocalServerPort来获取实际端口号。
        
        添加工业级服务:
            如果您正在为您的业务创建一个网站,您可能需要添加一些管理服务。spring boot通过actuator module模块提供了一些开箱即用的
            功能,如健康,审计,beans等。
            
            如果你使用maven,将以下内容加入到依赖中:
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                </dependency>
                
            如果你使用maven,执行以下命令:
                mvn package && java -jar target/gs-spring-boot-0.1.0.jar
                
            你会看到一组新的RESTful终端加入到了应用中,这是spring boot提供的管理服务。
            
            他们包括 errors, actuator/health, actuator/info, actuator.
            
            同样有一个/actuator/shutdown终端,但是它只通过JMX可见。在你的application.properties文件中增加management.endpoints.shutdown.enabled=true,可以使它作为一个http终端使用。
            
            很容易就可以检测应用的健康情况:
                $ curl localhost:8080/actuator/health
                {"status":"UP"}
            
            你可以尝试通过curl调用shutdown方法:
                $ curl -X POST localhost:8080/actuator/shutdown
                {"timestamp":1401820343710,"error":"Method Not Allowed","status":405,"message":"Request method 'POST' not supported"}
                由于我们没有开启此功能,所以请求会因为不存在而阻塞。
                
            要想知道更多REST终端的详细信息以及终端在application.properties文件中的参数配置,你可以详细的阅读docs about the endpoints。
            
            查看spring boot的启动项:
                你已经看到了一下spring boot的启动项,你可以在 here in source code.中查看spring boot的所有启动项。
            
        JAR支持和Groovy支持:
            最后的例子展示spring boot如何将您没有意识到但是您需要的bean连接起来。展示如何启动方便的管理服务。
            
            但是spring boot做的更多。它不仅支持war文件的部署,还通过加载器模型很容易的将可执行的jar包组合在一起。以下演示了对
            spring-boot-gradle-plugin和spring-boot-maven-plugin的双重支持:
                以下是groovy代码。。。不使用,不翻译
            
        总结:
            恭喜!你使用spring boot创建了一个简单的应用并且学会了如何使用spring boot加快你的开发步伐。你也开启了一些有帮助的产品服务。
            这只是spring boot的一小部分样例。如果你想要挖掘的更深可以参考 Spring Boot’s online docs。
            
        
                
            
            
            
                
                
                
                
        
        
        

猜你喜欢

转载自blog.csdn.net/a13662080711/article/details/81668105