SpringBoot2.0(Spring读取配置文件常用方法,打war包在Tomcat中启动)

目录

  • 一,SpringBoot中读取配置文件的常用方法
    • 1.1,使用@Value读取
    • 1.2,使用@ConfigurationProperties
    • 1.3,使用Environment
    • 1.4,自定义配置文件读取
  • 二,SpringBoot部署war项目到tomcat9和启动原理

一,SpringBoot中读取配置文件的常用方法

1.1,使用@Value读取

在springBoot声明周期内,可以使用@Value注解从SpringBoot的默认配置文件中读取配置信息

例如在Controller中使用:

    // 在配置文件中读取属性名为web.images-path对应的值@Value("${web.images-path}")private String path;

@Value可以放到属性或方法上,能够正常使用的前提是所在类,必须在SpringBoot的生命周期内。
我们怎么把一个类放到Spring的生命周期中进行管理?使用的是@Component注解
因为@Controller和@Service本身就包含@Component。所以可以直接使用。

下面是单独使用@Component的例子
创建一个config包,然后创建一个BootProperties

package com.demo.config;import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;@Component
public class BootProperties {@Value("${web.images-path}")public String path;
}

然后在controller中写

@RestController
public class HelloController {@Autowiredprivate BootProperties bootProperties;@RequestMapping("/test5")public Object test5(){return bootProperties.path;}}

在这里插入图片描述
使用ing类型写

package com.demo.config;import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;@Component
public class BootProperties {@Value("${web.images-path}")public String path;@Value("${server.port}")public int port;
}
@RestController
public class HelloController {@Autowiredprivate BootProperties bootProperties;@RequestMapping("/test5")public Object test5(){return bootProperties.path +  " ------ "+ bootProperties.port;}}

在这里插入图片描述

1.2,使用@ConfigurationProperties

BootProperties类

package com.demo.config;import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;@Setter  // lombok,生成set方法
@ConfigurationProperties(prefix = "server") // 配置属性类,并定制前缀
@Component  // 因为@ConfigurationProperties不能把此类放到boot容器中,所以要配合@Componpent使用
public class BootProperties {@Value("${web.images-path}")public String path;// 不使用@Value注解,需要保证:前缀+属性名=全路径。还需要此属性有对应的setter方法// @Value("${server.port}")public int port;// 使用@Value注解则需要写全路径
}

controller类

@RestController
public class HelloController {@Autowiredprivate BootProperties bootProperties;@RequestMapping("/test5")public Object test5(){return bootProperties.path +  " ------ "+ bootProperties.port;}}

在这里插入图片描述

1.3,使用Environment

Environment是SpringCore中的一个用于读取配置文件的类,将此类使用@Autowired注入到类中就可以使用它的getProperty方法来获取某个配置项的值

@RestController
public class HelloController {@Autowiredprivate Environment environment;@RequestMapping("/test7")public Object test7(){return environment.getProperty("server.port");}}

在这里插入图片描述

1.4,自定义配置文件读取

使用之前的知识来理解下面的代码。
主要添加新的注解@PropertySource

创建一个config包,然后创建一个SysProperties

package com.demo.config;import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "sys")
@Component
@PropertySource("classpath:sys.properties")
@Getter
@Setter
public class SysProperties {private String param1;private String param2;
}

controller类

@RestController
public class HelloController {@Autowiredprivate SysProperties sysProperties;@RequestMapping("/test6")public Object test6(){return sysProperties.getParam1()+sysProperties.getParam2();}}

在这里插入图片描述

二,SpringBoot部署war项目到tomcat9和启动原理

创建一个新项目
在这里插入图片描述
在添加个模块
在这里插入图片描述
然后在pom中添加依赖

    <packaging>war</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><finalName>passerby-war</finalName><plugins><plugin><!-- 打包插件 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

然后添加controller类和一个启动类
在这里插入图片描述
然后随便在Controller类里面加个方法

package com.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class Controller {@RequestMapping("/demo01")public Object demo01(){return "hello,war";}
}

开始打包
在这里插入图片描述
在文件夹中找到这个位置
在这里插入图片描述
找到后把刚打的war包复制下来
在这里插入图片描述
然后在到你Tomcat的位置
在这里插入图片描述
把war包复制到里面
在这里插入图片描述
然后打开bin目录
在这里插入图片描述
在里面找到startup.bat这个
在这里插入图片描述
打开等他运行完
在这里插入图片描述
然后在打开你刚才把war包粘贴的那个文件夹
在这里插入图片描述
现在就好了,打开浏览器试试

在这里插入图片描述

有什么不理解的可以私信!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解4种类型的爬虫技术

聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序&#xff0c;而通用网络爬虫则是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分&#xff0c;主要目的是将互联网上的网页下载到本地&#xff0c;形成一个互联网内容的镜像备份。 增量抓取意…

fastjson2 打开 AutoType

1. 功能简介 FASTJSON支持AutoType功能&#xff0c;这个功能在序列化的JSON字符串中带上类型信息&#xff0c;在反序列化时&#xff0c;不需要传入类型&#xff0c;实现自动类型识别。 2. AutoType安全机制介绍 必须显式打开才能使用。和fastjson 1.x不一样&#xff0c;fast…

HTML <map> 标签的使用

map标签的用途&#xff1a;是与img标签绑定使用的&#xff0c;常被用来赋予给客户端图像某处区域特殊的含义&#xff0c;点击该区域可跳转到新的文档。 编写格式&#xff1a; <img src"图片" border"0" usemap"#planetmap" alt"Planets…

【vue】vuex持久化插件vuex-persistedstate:

文章目录 一、说明&#xff1a;二、手动利用HTML5的本地存储&#xff1a;三、利用vuex-persistedstate插件【1】安装【2】配置使用【3】存储sessionStorage的情况【4】存储cookie的情况【5】默认持久化所有state&#xff0c;指定需要持久化的state,配置如下【6】vuex引用多个插…

ElementUI浅尝辄止23:Loading 加载

Loading加载组件&#xff1a;加载数据时显示动效。 常见于加载数据量大的业务操作&#xff0c;附带动态效果。 1.如何使用&#xff1f;区域加载 在表格等容器中加载数据时显示。 /*Element 提供了两种调用 Loading 的方法&#xff1a;指令和服务。对于自定义指令v-loading&am…

公园气象站——观测实时气象,保障游客安全

公园气象站是一种用于监测和记录气象数据的系统。在公园内设置公园气象站可以帮助我们了解公园内的气候状况&#xff0c;包括空气湿度、空气温度、风速和风向等参数。这些数据是公园管理、游客安全和环境保护等方面重要的辅助依据。 负氧离子监测&#xff1a;负氧离子是指空气…

数学建模--非多项式拟合法的Python实现

目录 1.算法异同区别 2.算法核心步骤 3.算法核心代码 4.算法效果展示 1.算法异同区别 #*************************************************************************************************************# 方法区别探究 1.对于多项式拟合你需要大致知道这些点的分布&#xf…

Dubbo 接口测试原理及多种方法实践总结

1、什么是 Dubbo&#xff1f; Dubbo 最开始是应用于淘宝网&#xff0c;由阿里巴巴开源的一款优秀的高性能服务框架&#xff0c;由 Java 开发&#xff0c;后来贡献给了 Apache 开源基金会组织。 下面以官网的一个说明来了解一下架构的演变过程&#xff0c;从而了解 Dubbo 的诞…

如何使用SQL系列 之 如何在SQL中使用WHERE条件语句

引言 在结构化查询语言 (SQL)语句中&#xff0c;WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点&#xff0c;每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…

开了抖店后就可以直播带货了吗?想在抖音带货的,建议认真看完!

我是王路飞。 关于抖店和直播带货的关系&#xff0c;其实很多人经常搞不清楚。 不然的话&#xff0c;也不会有这个问题的出现了&#xff1a;开了抖店后就可以直播带货了吗&#xff1f; 在我看来&#xff0c;这个问题很简单&#xff0c;但在不了解抖音电商和直播带货其中门道…

LeetCode——和为K的子数组(中等)

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2 题解 …

The WebSocket session [x] has been closed and no method (apart from close())

在向客户端发送消息时&#xff0c;session关闭了。 不管是单客户端发送消息还是多客户端发送消息&#xff0c;在发送消息之前判断session 是否关闭 使用 isOpen() 方法

Mysql-DML(数据处理语言)

-- 插入数据 insert into member values(1,张三,21,5000); insert into member(id,name) values(2,李四); insert into member values(3,王五,23,3000) ,(4,纪六,24,4000) ,(5,查七,25,5000); -- 更新&#xff08;修改数据) 不加限制条件 该字段全部修改 update member set age…

python .gitignore文件配置

logs/ venv/ *.log .idea/ dist/test.py注意&#xff1a;.gitignore最好放在根目录中。如果gitignore放在被忽略的父目录中&#xff0c;那忽略文件就无法生效。 .gitignore规则 .gitignore只能忽略那些原来没有被track的文件&#xff0c;如果某些文件已经被纳入了版本管理中&…

Elasticsearch 8.X 可以按照数组下标取数据吗?

1、线上环境问题 老师、同学们&#xff0c;有人遇到过这个问题么&#xff0c;索引中有一个 integer 数组字段&#xff0c;然后通过脚本获取数组下标为1的值作为运行时字段&#xff0c;发现返回的值是乱的&#xff0c;并不是下标为1的值&#xff0c; 具体如下: DELETE my_index …

sql:SQL优化知识点记录(六)

&#xff08;1&#xff09;索引优化1 查看一下有没有建立索引&#xff1a; 用到索引中的一个&#xff1a;type中的ref决定访问性能 用到索引中的两个&#xff1a;通过key_len的长度可以看出来&#xff0c;比第一个大一点。或者通过ref&#xff1a;中用到了两个常量const 用到了…

【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)

1 简介 Fragment是一个历史悠久的组件&#xff0c;从API 11引入至今&#xff0c;已经成为Android开发中最常用的组件之一。 Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。…

线程池使用不规范导致线程数大以及@Async的规范使用

文章详细内容来自&#xff1a;线程数突增&#xff01;领导&#xff1a;谁再这么写就滚蛋&#xff01; 下面是看完后文章的&#xff0c;一个总结 线程池的使用不规范&#xff0c;导致程序中线程数不下降&#xff0c;线程数量大。 临时变量的接口&#xff0c;通过下面简单的线…

如何合并为pdf文件?合并为pdf文件的方法

在数字化时代&#xff0c;人们越来越依赖电子文档进行信息交流和存储。合并为PDF成为一种常见需求&#xff0c;它能将多个文档合而为一&#xff0c;方便共享和管理。无论是合并多个单页文档&#xff0c;还是将多页文档合并&#xff0c;操作都变得简单高效。那么。如何合并为pdf…

ESP-C3入门24. 使用中断监控GPIO口

ESP-C3入门24. 使用中断监控GPIO口 一、ESP IDF中断概念1. 一些关键概念&#xff1a;2. GPIO 触发方式 二、ESP32 IDF 使用中断来处理 GPIO 输入的步骤1. 引入 ESP32 IDF 头文件&#xff1a;2. 配置 GPIO 引脚&#xff1a;3. 定义中断处理函数&#xff1a;4. 初始化 GPIO 引脚5…