落叶知秋|两小时入门SpringBoot学习(基础)(上)( 四 )


落叶知秋|两小时入门SpringBoot学习(基础)(上)现在你可能需要问 , 假如我某一个项目当时打包用了dev环境 , 现在我想运行在prd环境 , 那应该怎样操作呢?有人说这是一个jar包可以解压后 , 通过修改主配置文件方式啊 , 这种方式似乎是可行的 , 但是假设某个人电脑上此时没有安装可以解压jar包的软件呢?这时候不就没办法了吗?
其实SpringBoot早就想到这个问题了 , 你只需要将三个配置文件:application.yml、application-dev.yml和application-prd.yml放在之前打包成的jar的文件夹内即可(注意它们四个必须在同一个文件夹中) , 然后通过修改这三个配置文件 , jar包会优先读取外面三个yml文件的相关配置 。
如果你觉得上面那种方式还是不行 , 那你可以在项目启动的时候指定运行环境 , 使用的命令为:java -jar Dspring.profiles.active=prd 项目名称 , 还有其实后面可以直接使用项目绝对路径启动的java -jar Dspring.profiles.active=prd F:\Springboot\Test\luckymoney\target\luckymoney-0.0.1-SNAPSHOT.jar这种方式来启动 。
Controller的使用先来看三个注解的使用:@Controller和在SpringMVC中的用法没什么大的变化 , 用于处理http请求;@RestController这个注解是Spring4之后新增的 , 用于替代原来返回json数据需要使用@Controller和@ResponseBody这两个注解;@RequestMapping在方法上使用 , 用于配置url映射 。 (前面说过是在springboot1.x版本中使用 , 但是在一些特殊项目中还是需要使用这个)
前面都是直接返回json对象 , 接下来介绍如何返回html信息 。 首先明确既然需要返回html信息 , 因此不能使用@RestController注解 , 同时有必要说明一下@ResponseBody注解的作用 , @ResponseBody注解的作用是将controller中方法返回的对象通过适当的转换器转换为指定的格式之后 , 写入到response对象的body区 , 通常用来返回JSON数据或者是XML 。 所以需要将HelloController类中的@RestController修改为@Controller , 但是你仅仅这样是不行的 , 因为你返回的对象无法通过视图解析器进行解析 , 因此还需要引入模板解析引擎thymeleaf(读做[taim li:f], 也就是百里香的意思) 。
第一步 , 在pom.xml文件中新增thymeleaf依赖:
org.springframework.bootspring-boot-starter-thymeleaf第二步 , 在templates文件夹中新建index.html文件 , 里面的代码为:
首页welcome to learn springboot!第三步 , 使用thymeleaf模板 , 修改HelloController.java中的代码为:
package com.envy.luckymoney.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;@Controllerpublic class HelloController {@Autowiredprivate InfoConfig infoConfig;@GetMapping("/hello")public String say(){return "index";}}启动项目 , 在浏览器地址栏输入http://localhost:8081/luckymoney/hello , 可以看到信息:welcome to learn springboot! 。 这种模板渲染用的比较少 , 大部分都是前后端分离的模式 。 注释掉刚才增加的依赖和代码 , 我们继续回到之前的内容 。
注意@ResponseBody注解的位置 , 如果你希望某个controller中的所有方法都是返回json , 那么可以直接在controller类上使用@ResponseBody , 如果其中某个方法需要返回内容 , 那么就建议只在某个需要返回json数据的方法上使用@ResponseBody注解 。