`
weigang.gao
  • 浏览: 491772 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SpringBoot HelloWorld

 
阅读更多

1.首先创建一个Maven项目,Pom文件的内容如下:

<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.example</groupId>
  <artifactId>myproject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>1.3.6.RELEASE</version>
  </parent>
  
  <dependencies>
      <!-- add typical dependencies for a web application -->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>
  
  <build>
      <plugins>
         <!-- Spring Boot提供了一个用于创建可执行jars的Maven插件 -->
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>  
  </build>
</project>

项目的目录结构如下:


 
1.编写Application

package com.zto.demo;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 
 * 
 * 我们的Example类上使用的第一个注解是@RestController。这被称为一个构造型注解。它为阅读代码的人们提供建议。
 * 对于Spring,该类扮演了一个特殊角色。在本示例中,我们的类是一个web @Controller,所以当处理进来的web请求时,
 * Spring会询问他
 *
 */
@RestController
@SpringBootApplication
public class Application{
	
	/**
	 * @RequestMapping注解提供路由信息。它告诉Spring任何来自"/"路径的请求都应该被映射到home方法。
	 * @RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者 。
	 */
	@RequestMapping("/")
	String home(){
		return "Hello World";
	}
		
	public static void main(String[] args) throws Exception{
		SpringApplication.run(Application.class, args);
	}

}

2.直接运行Application中的main方法,然后在浏览器中输入http://localhost:8080/ 



3.@SpringBootApplication注解【该@SpringBootApplication注解等价于以默认属性使用@Configuration, @EnableAntoConfiguration 和 @ComponentScan。】

 

4.@ConfigurationProperties注解【任何被@ConfigurationProperties注解的beans将自动被Environment属性(application.properties,application.yml中的配置)配置】

 

package com.zto.demo.bean;

import java.net.InetAddress;

import javax.validation.constraints.NotNull;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
	
	private String username;
	
	/**
	 * Spring Boot将尝试校验外部的配置
	 * NotNull校验remoteAddress字段不能为空,否则启动服务将会报错
	 */
	//@NotNull
	private InetAddress remoteAddress;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public InetAddress getRemoteAddress() {
		return remoteAddress;
	}

	public void setRemoteAddress(InetAddress remoteAddress) {
		this.remoteAddress = remoteAddress;
	}
	
	@Override
	public String toString() {
		return "username :" + username + ", remote :"+remoteAddress;
	}

}

 

5.编写application.properties以及application.yml

person.name=gaoweigang

 application.ymml文件配置

my:
  servers:
        - dev.bar.com
        - foo.bar.com
  mother:
        LiuJinJu
  first-name:
        GAO
        
connection:
    username: admin
    #remoteAddress: 192.168.1.1

6.编写MyBean

package com.zto.demo.bean;

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.NotNull;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@ConfigurationProperties(prefix="my")
public class MyBean {

	/**
	 * 将application.properties文件捆绑到jar内,用来提供一个合理的默认name属性值
	 */
	@Value("${person.name}")
	private String name;
	/**
	 * 测试生成整形随机数 
	 */
	@Value("${random.int}")
	private int age;
	
	/**
	 * 使用Spring DataBinder工具绑定YAML文件中的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中
	 * 必须要有可变的值初始化它(因为List是可变的,所以就不用配置相应的setter方法),
	 * 比如,下面的代码将绑定上面的属性
	 */
	private List<String> servers = new ArrayList<String>();
	
	/**
	 * 推荐使用,尽量不要使用@Value()这种方式,这种方式太笨重了
	 * 使用Spring DataBinder工具绑定YAML文件中的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中
	 * 必须要有setter方法(因为String是不可变的,所以必须配置setter方法),比如,下面的代码将绑定上面的属性
	 */
	private String mother;
	
	/**
	 * 松散绑定(Relaxed binding):application.yml中的字段不必和bean中的成员变量名完全一致 
	 * 必须要有相应setter()方法
	 */
	private String firstName;
	
	@Autowired
	private ConnectionSettings connection;
	
	
	@RequestMapping("/hello")
	public String hello(){
		
		return "Hello  "+name +
				"<br/>age :"+age +
				"<br/>servers: " + this.getServers() + 
				"<br/>mother: "+ this.getMother()+
				"<br/>first-name:"+firstName;
	}
	
	
	@RequestMapping("/connectionTest")
	public String connection(){
		return connection.toString();
	}


	public List<String> getServers() {
		return servers;
	}


/*	public void setServers(List<String> servers) {
		this.servers = servers;
	}*/

	public String getMother() {
		return mother;
	}


	public void setMother(String mother) {
		this.mother = mother;
	}


	public String getFirstName() {
		return firstName;
	}


	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

}

6.浏览器验证

①使用http://localhost:8080/hello

②使用http://localhost:8080/connectionTest

适当的解释:

一.Starter POMs

Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有Spring及相关技术的一站式服务,而

不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目中

包含spring-boot-starter-data-jpa依赖,然后你就可以开始了。

 

该starters包含很多你搭建项目,快速运行所需要的依赖,并提供一致的,管理的传递依赖集。

 

名字有什么含义:所有的starters遵循一个相似的命名模式:spring-boot-starter-*,在这里*是一种特殊类型的应用程序。

该命名结构旨在帮你找到需要的starter。很多IDEs集成的Maven允许你通过名称搜索依赖。例如,使用相应的Eclipse或STS

插件,你可以简单地在POM编辑器中点击ctrl-space,然后输入“spring-boot-starter"可以获取一个完整列表。

 

 

二.配置类

Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用SpringApplication.run(),我们通常建议你使用

@Configuration类作为主要源。一般定义main方法的类也是主要@Configuration

 

自动配置

Spring Boot自动配置尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且

你没有手动配置任何数据连接beans,那么我们将自动配置一个内存型数据库。

 

你可以通过将@EnbleAntoConfiguration或者@SpringBootApplicaiton注解添加到一个@Configuration类上来选择自动配置。

 

 

禁用特定的自动配置

如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解排除属性来禁用它们。

例如:@EnableAntoConfiguration(exclude={DataSourceAutoConfiguration.class})

 

 

三.使用@SpringBootApplication注解

很多Spring Boot开发者总是使用@Configuration, @EnbleAntoConfiguration和@ComponentScan 注解他们的main类。

由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的@SpringBootApplication

选择。

 

该@SpringBootApplication注解等价于以默认属性使用@Configuration, @EnableAntoConfiguration 和 @ComponentScan。

 

 

四.运行应用程序

将应用打包成jar并使用一个内嵌HTTP服务器的一个最大好处是,你可以像其他方式那样运行你的应用程序。调试Spring Boot

应用也很简单:你不需要任何特殊IDE或扩展

 

 

Web环境

一个SpringApplication将尝试为你创建正确类型的ApplicationjContext。在默认你情况下,使用AnnotationConfigApplicationContext

或AnnotationConfigEmbeddedWebApplicationContext取决于你正在开发的是否是web应用。

 

用于确定一个web环境的算法相当简单(基于是否存在某些类)。如果需要覆盖默认的行为,你可以使用setWebEnvironment(boolean webEnvironment)。

通过调用setApplicationContextClass(...),你可以完全控制ApplicationContext的类型。

 

注:当JUnit测试里使用SpringApplication,调用setWebEnvironment(false)是可取的

 

 

 

五.外化配置

Spring Boot允许外化你的配置,这样你能够在不同 的环境下使用相同的代码。你可以使用properties文件,YAML文件,

环境变量和命令行参数来外化配置。使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment

抽象或绑定到结构化对象来访问。

Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖,需要以下面的次序考虑属性:

1.命令行参数

2.来自于java:comp/env的JNDI属性

3.Java系统属性(System.getProperties())

4.操作系统环境变量

5.只有在random.*里包含的属性会产生一个RandomValuePropertySource(生成随机数的)

 

 

Application属性文件

SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中:

1.当前目录下的一个/config子目录

2.当前目录

3.一个classpath下的/config包

4.classpath根路径(root)

 

这个列表是按优先级排序的(列表中的位置高的将覆盖位置低的)

注:你可以使用YAML('*.yml')文件替代'.properties'

 

如果不喜欢将application.properties作为配置文件名,你可以通过指定spring.config.name环境属性来切换其他的名称。

你也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分隔)。

 

 

二.特定的Profile属性

除了application.properties文件,特定配置属性也能通过命令惯例application-{profile}.properties来定义。特定

Profile属性从跟标准application.properties相同的路径加载,并且特定profile文件会覆盖默认的配置。

 

三.属性占位符

当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)。

app.name=MyApp

app.description=${app.name} is a Spring Boot application

注:你也能使用相应的技巧为存在的Spring Boot属性创建'短'变量

 

 

四.使用YAML代替Properties

YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将Snake YAML库放到classpath下, 

SpringApplicaiton类都会自动支持YAML作为properties的替换。

 

注:如果你使用'starter POMs', Spring-boot-starter会自动提供Snake YAML。

 

五.加载YAML

Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML作为Properties来加载,

YamlMapFactoryBean会将YAML作为Map来加载。

 

六.YAML缺点

YAML文件不能通过@PropertySource注解加载。所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,

那就要使用Properties文件。

 

七.

@PostConstruct 注解的含义

 

八.@ConfigurationProperties校验

Spring Boot将尝试校验外部的配置

 

  • 大小: 3.8 KB
  • 大小: 14.3 KB
  • 大小: 9.1 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    springboot HelloWorld

    SpringBoot HelloWorld 是一个初学者经常会遇到的示例项目,它旨在帮助开发者快速了解并开始使用Spring Boot框架。Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化新Spring应用的初始搭建以及开发过程...

    springboot helloworld程序(带简单测试用例)

    SpringBoot HelloWorld程序是初学者入门SpringBoot框架时最常见的示例项目。这个程序旨在展示如何快速地搭建一个基于SpringBoot的应用,并包含简单的测试用例来验证功能。以下将详细讲解SpringBoot的基本概念、Hello...

    springboot-helloworld.rar

    《SpringBoot HelloWorld初探》 在当今的Java开发领域,SpringBoot框架因其简化Spring应用的初始搭建以及开发过程而备受青睐。"springboot-helloworld.rar"这个压缩包,显然是一个入门级的示例,旨在帮助开发者快速...

    springboot-helloworld

    在"springboot-helloworld"项目中,我们将深入探讨SpringBoot的基础知识和实践应用。 首先,让我们从“helloworld”这个经典的起点开始。在SpringBoot项目中,创建一个简单的"Hello, World!"应用通常涉及到以下步骤...

    SpringBoot HelloWorld工程

    SpringBoot的第一个工程内容是HelloWorld,具体实现过程可以看我的blog,关于SpringBoot的学习(一)

    springboot的helloworld入门程序

    这个"springboot的helloworld入门程序"是初学者理解并掌握SpringBoot基础的一个绝佳起点。下面我们将深入探讨SpringBoot的基本概念、核心特性以及如何创建一个简单的"Hello, World!"程序。 1. **SpringBoot简介** ...

    SpringBoot之HelloWorld的Maven项目(Eclipse)

    **SpringBoot之HelloWorld的Maven项目(Eclipse)** SpringBoot是由Pivotal团队开发的一个框架,旨在简化Spring应用程序的初始搭建以及开发过程。它集成了大量的常用库,如数据访问、安全、Web等,使得开发者可以...

    一、springboot helloworld.md

    初识sprngboot

    spring boot - hello world

    在"Hello World"示例中,通常有一个带有`@SpringBootApplication`注解的主类。这个注解集成了`@Configuration`(配置)、`@EnableAutoConfiguration`(自动配置)和`@ComponentScan`(组件扫描),从而启动Spring ...

    springboothelloworld.zip

    SpringBoot HelloWorld 示例是一个基础的Web应用,用于演示Spring Boot框架的基本使用。Spring Boot是由Pivotal团队提供的一个全新框架,其设计目标是用来简化新Spring应用的初始搭建以及开发过程。它集成了大量的...

    SpringBoot-HelloWorld:SpringBoot HelloWorld入门应用程序-Udacity Java Nanodegree

    SpringBoot-HelloWorld SpringBoot HelloWorld入门应用程序-Udacity Java Nanodegree 下载 https://start.spring.io/ Spring Boot 2.1.8 RELEASE 在命令行上运行 mvn spring-boot:run 在浏览器中

    Web项目Springboot-HelloWorld-war包

    利用springboot开发的简易helloworld的war包,供测试使用

    spring-boot-helloworld.zip

    在 "spring-boot-helloworld.zip" 这个压缩包中,我们很可能是找到了一篇关于 Spring Boot 入门的博客文章示例代码,用于展示如何构建一个简单的 "Hello World" 应用。 在 Spring Boot 中创建一个 "Hello World" ...

    wicket的helloworld

    **Wicket HelloWorld程序详解** Wicket是一个开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“Wicket的HelloWorld”程序是初学者入门Wicket的典型例子,它展示了如何利用...

    hello-world-rest:Springboot Hello World REST服务

    "hello-world-rest:Springboot Hello World REST服务"是一个典型的入门级项目,它展示了如何使用Spring Boot创建一个简单的RESTful Web服务。REST(Representational State Transfer)是一种架构风格,常用于构建Web...

    spring boot helloworld

    SpringBoot 入门Demo源码,只是单纯的分享给有需要的人使用,俗话说的好,万事开头难,当迈开了第一步,就相当于打开了一扇门,发现了新大陆,所以我们要持之以恒,才能取得成功,让我们一起努力,为心中最美好的...

    Springboot-helloworld案例

    创建独立的 Spring 应用程序  嵌入的 Tomcat,无需部署 WAR 文件  简化 Maven 配置  自动配置 Spring  提供生产就绪型功能,如指标,健康检查和外部配置  开箱即用,没有代码生成,也无需 XML 配置。

    Spring boot 示例 官方 Demo

    spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决...

Global site tag (gtag.js) - Google Analytics