01) idea+springboot入门

1.创建SpringBoot项目

  

 

   

  

  

  注意:会自动生成一个包含main函数的应用入口类

 

package cn.xinagxu.girl02;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Girl02Application {

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

 

  注意:创建好的springboot项目的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>cn.xinagxu</groupId>
    <artifactId>girl02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </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>

   福利:SpringBoot项目脚手架 -> 点击前往

    该脚手架包含的东西

      》开发热部署

      》日志文件配置;注意:日志文件配置在static中的logback-spring.xml,如果要使用将这个配置文件移动到resources目录下后进入该配置文件修改日志存放路径即可使用

      》多环境配置;注意:默认使用的是开发环境

      》数据库配置;注意:使用的mysql数据库

  1.1 利用springBoot项目编写一个hello world

    编写一个controller类,当前段请求为 http://127.0.0.1:8080/ 时以JSON格式放回 Hello World!

 

package cn.xinagxu.girl02.controller;

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

@RestController
public class HelloController {

    @RequestMapping(value = "/")
    public String hello() {
        return "Hello World!";
    }
}

 

    注意:@RestController = @Controller + @ResponseBody

 

   1.2 启动应用

    1.2.1 直接在应用入口类中点击右键运行即可

      

    1.2.2 利用maven启动

      进入到项目的根目录后执行

        mnv spring-boot:run

      

    1.2.3 利用maven启动方式2

      进入到醒目根目录

        执行 mvn install 编译项目

          

        再去到 target 目录下 cd target

          注意:target目录存放的都是编译过后的文件

          

        再利用 java -jar 项目名.jar

          

 

2 属性配置

  2.1 springBoot支持两种方式的配置文件

    properties  yml

      配置上下文路径为  /girl02

      配置端口为:8888  

properties  配置 

 

server.context-path=/girl02
server.port=8888

yml  配置

server:
  context-path: /girl
  port: 9999

注意:yml的配置时冒号后面必须加一个空格;推荐使用yml格式的配置方式

  2.2 单个的属性配置

    在配置文件中配置变量以及变量值

      

    在需要用到的地方引入这个属性,类似于从容器中引入对象一样

      

 

 

package cn.xinagxu.girl02.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Controller
@ResponseBody
public class HelloController {

    @Value("${character}")
    private String character;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String content;

    @RequestMapping(value = "/")
    public String hello() {
        return "Hello World!" + "性格:" + character + " 年龄:" + age + " 详细信息为:" + content;
    }
}

 

  2.3 将一个对象作为单个属性进行配置

    编写一个实体类

 

 

package cn.xinagxu.girl02.entity;

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

@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

    在配置文件中配置实体类的属性值

      类似于给一个实体bean赋值

      

    在用到的地方引入这个实体类

      

 

 

package cn.xinagxu.girl02.controller;

import cn.xinagxu.girl02.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Controller
@ResponseBody
public class HelloController {

    @Value("${character}")
    private String character;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String content;

    @Autowired
    private Student student;

    @RequestMapping(value = "/")
    public String hello() {
//        return "Hello World!" + "性格:" + character + " 年龄:" + age + " 详细信息为:" + content;
        return student.toString();
    }
}

 

   2.4 坑:在工具类中如何获取配置文件信息

    获取方式不变,但是如果使用new去创建工具实例,那么工具类中就不会获取到相关的配置文件信息;必须将配置类被容器管理,然后在需要使用配置类的地方依赖注入即可;否则读取到的配置信息全部都是null;参考博文  

 

package cn.xiangxu.redis_demo.common.uitls;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;

/**
 * @author 王杨帅
 * @create 2018-06-25 13:35
 * @desc jedis客户端工具类
 **/
@Component
public class JedisClientUtil {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private Integer port;

    private final byte[] temp_lock = new byte[1];
    private Jedis jedis;

    public JedisClientUtil(){}

    public Jedis getRedisClient() {
        if (jedis == null) {
            synchronized (temp_lock) {
                if (jedis == null) {
                    System.out.println(host);
                    System.out.println(port);
                    jedis = new Jedis(host,port);
                }
            }
        }
        return jedis;
    }

}

 

  

 

 

package cn.xiangxu.redis_demo.web;

import cn.xiangxu.redis_demo.common.uitls.JedisClientUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author 王杨帅
 * @create 2018-06-25 13:35
 * @desc Redis相关
 **/
@RestController
@RequestMapping(value = "/redis")
@Slf4j
public class RedisController {

    /**
     * 单例模式
     */
    @Test
    public void test01() {
        // 01 获取Jedis客户端【设置IP和端口】
        Jedis jedis = new Jedis("192.168.233.134", 6379);

        // 02 保存数据
        jedis.set("name", "王杨帅");

        // 03 获取数据
        String value = jedis.get("name");
        System.out.println("获取到的数据为:" + value);

        String age = jedis.get("age");
        System.out.println("获取到的年龄信息为:" + age);


        // 04 释放资源
        jedis.close();
    }

    /**
     * 使用连接池模式
     */
    @Test
    public void test02() {
        System.out.println("Hello Warrior");

        // 01 获取连接池对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 0101 最大连接数
        config.setMaxTotal(30);
        // 0102 最大空闲连接数
        config.setMaxIdle(10);

        // 02 获取连接池
        JedisPool jedisPool = new JedisPool(config, "192.168.233.134", 6379);

        // 03 核心对象【获取Jedis客户端对象】
        Jedis jedis = null;
        try {
            // 0301 通过连接池获取Jedis客户端
            jedis = jedisPool.getResource();
            // 0302 设置数据
            jedis.set("name", "三少");
            // 0303 获取数据
            String value = jedis.get("name");
            System.out.println(value);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
            if (jedisPool != null) {
                jedisPool.close();
            }
        }
    }

    @Autowired
    private JedisClientUtil jedisClientUtil;

    @GetMapping(value = "/connect")
    public void connect() {
//        JedisClientUtil jedisClientUtil = new JedisClientUtil();
        Jedis jedis = jedisClientUtil.getRedisClient();
    }

}

 

 

 3 多环境配置

  

  注意:前面两个配置文件中配置的东西是公用的,后面两个中一个是开发环境,一个是生产环境

    

 

 

#server:
#  context-path: /girl
#  port: 9999

spring:
  profiles:
    active: prod


character: 外向
age: 24

content: "性格:${character}, 年龄:${age}"

student:
  id: 1
  age: 24
  naem: 三少

 

 

server:
  context-path: /girl
  port: 9999

 

server:
  context-path: /girl
  port: 8888

  3.1 同时在启动两个环境

    在IntelliJ IDEA中启动主配置中指定的那个环境

    利用maven启动项目,并指定运行环境

      java -jar 项目名.jar --spring.profiles.active=prod

      注意:运行前需要编译项目然后进入到target文件夹中

    

4自定义properties配置

  Bean注入详解

  4.1 properties配置文件

    在properties配置文件中配置一个自定义配置,例如

xiangxu.security.browser.loginPage = /demo-signIn.html

  4.2 创建一个SecurityProperty对象

    该对象是用来保存properties配置文件中以 xiangxu.security开始的所有配置信息

    技巧01:需要在该实体类上标注 @ConfigurationProperties(prefix = "xiangxu.security") 注解来声明该实体类是用来保存properties配置文件中以 xiangxu.security开始的所有配置信息

    技巧02:该对象中有一个名为browser的实体属性,该属性是用来存放在properties文件中以browser开始的配置信息

    技巧03:在properties文件中xiangxu.security的配置信息属性名必须和SecurityProperty对象的实例属性名保持一致

    技巧04:如果给实体类的属性设定了默认值后,如果在配置文件中没有对应的配置就会使用属性对应的默认值作为默认配置

    

 

 

package com.example.wiremock.entity.properties;

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

/**
 * @author 王杨帅
 * @create 2018-05-13 13:45
 * @desc
 **/
@ConfigurationProperties(prefix = "xiangxu.security")
public class SecurityProperty {
    private BrowserProperty browser;

    public BrowserProperty getBrowser() {
        return browser;
    }

    public void setBrowser(BrowserProperty browser) {
        this.browser = browser;
    }
}

 

  4.3 创建 BrowserProperty 对象

    该对象是用来存放propertes文件中browser开始的配置信息

    技巧01:properties配置文件中browser后面的属性名必须和实体类BrowserProperty的实例属性名一致

     

 

 

package com.example.wiremock.entity.properties;

/**
 * @author 王杨帅
 * @create 2018-05-13 13:46
 * @desc
 **/
public class BrowserProperty {
    private String loginPage;

    public String getLoginPage() {
        return loginPage;
    }

    public void setLoginPage(String loginPage) {
        this.loginPage = loginPage;
    }
}

 

  4.4 SpringBoot配置类

    创建一个配置类,来让我们定义的实体类和properties配置文件中的配置信息对应起来;这样我们只需要依赖注入我们创建的实体类SecurityProperty就可以读取到properties中的配置信息了

    

 

 

package com.example.wiremock.config;

import com.example.wiremock.entity.properties.SecurityProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(SecurityProperty.class)
public class PropertiesConfig {


}

 

  4.5 测试类

    项目启动后依赖注入配置实体类后,就可以通过依赖注入的对象去获取到对应的propertes配置信息

 

 

package com.example.wiremock.controller;

import com.example.wiremock.entity.properties.SecurityProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @author 王杨帅
 * @create 2018-05-13 14:15
 * @desc
 **/
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class PropertiesTest {

    // 01 依赖注入配置实体类
    @Autowired
    private SecurityProperty securityProperty;

    @Test
    public void test01() {
        log.info(ReflectionToStringBuilder.toString(securityProperty, ToStringStyle.MULTI_LINE_STYLE));
        log.info(securityProperty.getBrowser().getLoginPage());
    }

}

 

关注公众号,将会有更多精彩每天送达:

公众号内有精彩内容,可以提现

 

 

 

原文链接:https://www.cnblogs.com/NeverCtrl-C/p/7688816.html#top

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值