properties
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于properties内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在properties相关知识领域提供全面立体的资料补充。同时还包含 package、package文件、padding 的知识内容,欢迎查阅!
properties相关知识
-
Java 读写Properties配置文件1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。 2.Properties中的主要方法 (1)load(InputStream inStream) 这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象。如下面的代码: Properties pro = new Properties(); FileInputStream in = new FileInputStream("a.properties"); pro.load
-
读取properties 文件的方法在java类中有时我们需要对一些properties 文件进行读取 1 利用类加载器进行读取 InputStream inStream = DBOperationImpl.class.getClassLoader().getResourceAsStream("config/jdbc.properties"); Properties prop = new Properties(); prop.load(inStream); userName = prop.getProperty("jdbc.username","root"); //设置默认值 password = prop.getProperty("jbbc.password","root"); String url = prop.getProperty("jdbc.url"); 利用类加载读取时prop.getProperty
-
Properties类1.继承关系java.lang.Object 继承者 java.util.Dictionary<K,V> 继承者 java.util.Hashtable<Object,Object> 继承者 java.util.Properties2.特性Properties1.继承与Hashtable,所以是线程安全的键值对存储结构2.可保存在流中或从流中加载3.不同于Hashtable,Hashtable可保存object对象的键值对,Properties只能保存字符串类型的键值对3.常用方法:setProperty(String key, String value) 调用 Hashtable 的方法 put。getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。list(PrintWriter out
-
Spring&amp;SpringBoot properties先看看原情况以及效果图image.png说到乱码问题,其实目前遇到的乱码问题原因可以归根为读取协议不对等,例如使用GBK文件格式去读取UTF-8文件格式的内容肯定会出现乱码,那么我们解决问题的整体思路也就是使用合适的读取格式去读取文件内容本篇学习笔记代码地址在simple-spring 的spring-learn模块的bpp文件夹中Properties 文件读取在之前的学习笔记中Spring Properties属性获取 源码学习,也曾经介绍过如何读取@Value("${XXX}")在属性文件中XXX对应的值。PropertySourcesPlaceholderConfigurer 类是实现BeanFactoryPostProcessor接口的,在执行postProcessBeanFactory方法的时候,会进行属性文件的读取并且把键值对信息存储到PropertySourcesPlaceholderConfigurer类本身的容器中在抽象类PropertiesLoaderSupport的
properties相关课程
properties相关教程
- 3. 属性 properties 通过 properties 配置,我们可以将一些重要的配置属性抽离到其它的 .properties 文件。比如,dataSource 中的数据库 url、用户名和密码,我们可以单独以 datasource.properties 文件来存储,然后在 mybatis-config.xml 文件中导入使用。在 resources 目录下新建 datasource.properties 文件,并填入以下内容:url=jdbc:mysql://localhost:3306/imooc?useSSL=falseusername=rootpassword=123456然后在 mybatis-config.xml 文件中通过 properties 配置来引入 datasource.properties 文件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 引入datasource.properties --> <properties resource="datasource.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!-- 占位符动态替换配置 --> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments></configuration>通过 properties 中的 resource 属性引入 datasource.properties 后,我们就可以使用占位符的方式去动态替换配置,如 ${url},表示从 datasource.properties 文件中取出 url 项并填充在此处。它们在目录中的位置如下:src/main/resources├── datasource.properties├── mybatis-config.xml
- 3.2 获取属性列表 上面我们说到了 Object.keys() 会对参数做类型转换,在获取属性的时候会调用内部方法 EnumerableOwnProperties ( O, kind ) 来计算对象上所有可枚举的属性 ownKeys,这里的 ownKeys 类型时 list 类型,只用于内部实现。然后声明变量用于存放遍历对象后得到的属性集合 properties,properties 也是 List 类型,循环对象的 ownKeys 将每个元素添加到 properties 列表中。最后返回 properties。为什么会对数值进行排序,是因为在调用 EnumerableOwnProperties(O, kind) 方法执行时,又会调用 OrdinaryOwnPropertyKeys(O) ,对于不同类型的属性,会按不同的顺序放入 properties 属性列表中:先处理类型为数值的属性,从小到大放到属性列表中;再处理类型为字符串的属性,按该属性的创建顺序,放到属性列表中;最后处理类型为 Symbol 的属性,按创建顺序,放到属性列表中。这样就知道为什么会对数值进行排序了,是 ECMA262 中 OrdinaryOwnPropertyKeys(o) 规定的。其原因是 OrdinaryOwnPropertyKeys(o) 内部方法不只是给 Object.keys() 使用的,是通用的规则。最后将 properties 列表转化为数组就得到了 Object.keys() 的结果。
- 4.1 Extension 注解相关属性 name () 和 properties () 属性定义:name 属性就是定义拓展参数数组列表的名称,也可以理解为定义拓展参数的名称。properties 属性就是定义拓展参数的列表,即将拓展参数放到一个数组里面,可以是一个也可以是多个。使用方法:name 和 properties 两个属性虽然属于 @Extension 注解,但是 @Extension 注解不能单独拿来使用,需要和 @ApiOperation 注解一起搭配才能使用,因为在 @ApiOperation 注解中存在一个名为 extensions 的属性,其属性的值就是通过 @Extension 注解来描述的。例如,对于用户登录方法,我想为其添加一个拓展参数,那我们可以这样写:@Extension(name = "用户登录拓展参数", properties = { @ExtensionProperty(name = "userEmail", value = "user email") } )(现在你不需要理解业务代码代表什么意思,重点看所使用的注解及属性即可,下同)。@ApiOperation(value = "user", extensions = { @Extension(name = "用户登录拓展参数", properties = { @ExtensionProperty(name = "userEmail", value = "user email") } ) })public ServerResponse<User> login(User user){ // do something...} 代码解释:1-3 行,我们在用户登录接口方法的上方通过使用 @ApiOperation 注解来使用 @Extension 注解的 name 和 properties 属性,由于篇幅有限,这里就不给大家截图演示了。Tips :在使用 @Extension 注解及其相关属性时,一定要看清楚该注解是通过哪种方法进行使用的。在实际项目开发中,一般具体的一个接口很少会出现拓展参数,如果存在,那也是通过业务需求来描述的,我们不能随意编造任何拓展参数。
- 2.2 插件接口 插件必须实现 Interceptor 接口。Interceptor 接口共有 3 个方法,如下:public interface Interceptor { Object intercept(Invocation invocation) throws Throwable; default Object plugin(Object target) { return Plugin.wrap(target, this); } default void setProperties(Properties properties) { }}其中 plugin 和 setProperties 方法都是默认实现的方法,我们可以选择不覆盖实现,而 intercept 方法则必须实现。如下:intercept : 核心方法,通过 Invocation 我们可以拿到被拦截的对象,从而实现自己的逻辑。plugin: 给 target 拦截对象生成一个代理对象,已有默认实现。setProperties: 插件的配置方法,在插件初始化的时候调用。
- 3. 资源过滤 我们使用 Maven 资源过滤的目的和使用 Profile 的目的很大程度上是类似的,就是为了增强项目构建的可移植性。之前我们在 Profile 的章节中,讲到了在构建项目的时候,激活对应的 Profile 来使用对应的配置,当时我们把配置都放在了配置文件中,因此,如果有多套环境的话,那么配置文件就相应的需要多套。这里,我们换一种方式来进行资源过滤。在讲 Profile 的章节中,我们使用 mall-order 模块来演示,这次我们换为 mall-delivery 模块来演示。首先在 src\main\resources目录下添加application.yml文件,用作配置文件。文件中的内容如下:spring: datasource: driver-class-name: ${database.driverClass} username: ${database.username} password: ${database.password} url: ${database.url} type: com.alibaba.druid.pool.DruidDataSource这里,可以看到,我们使用了${}的方式来引用属性,这个属性可以定义在pom.xml文件中。接下来,我们就在pom.xml 文件中配置对应的属性。<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources></build><profiles> <profile> <id>dev</id> <properties> <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass> <database.url>jdbc:mysql://localhost:3306/dev</database.url> <database.username>userNameDev</database.username> <database.password>passwordDev</database.password> </properties> </profile> <profile> <id>test</id> <properties> <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass> <database.url>jdbc:mysql://localhost:3307/test</database.url> <database.username>userNameTest</database.username> <database.password>passwordTest</database.password> </properties> </profile></profiles>通常情况下,资源过滤是关闭的,如果需要开启,则需要我们手动设置 <filtering>true</filtering>。默认关闭也是为了防止在构建的过程中发生一些不必要的过滤情况。这里,我们分别配置了开发环境的数据库信息和测试环境的数据库信息(其实也是使用的 Profile 的方式)。其中 properties 节点配置了我们自定义的属性,其与我们刚刚在application.yml文件中配置的占位符是一样的。接下来,我们进行项目构建可以指定对应的 Profile,执行 Maven 命令mvn clean package -Pdev。构建完成后,我们可以查看target\classes目录下的构建结果,会发现配置文件中的确是用的开发环境的 Profile,目的达成。spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: userNameDev password: passwordDev url: jdbc:mysql://localhost:3306/dev type: com.alibaba.druid.pool.DruidDataSource以上的配置,还可以进行一下修改。由于我们平时更多的是在用开发环境的配置,因此,我们可以把开发环境的配置单独放置出来。<build> ...</build><properties> <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass> <database.url>jdbc:mysql://localhost:3306/dev</database.url> <database.username>userNameDev</database.username> <database.password>passwordDev</database.password></properties><profiles> <profile> <id>test</id> <properties> <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass> <database.url>jdbc:mysql://localhost:3307/test</database.url> <database.username>userNameTest</database.username> <database.password>passwordTest</database.password> </properties> </profile></profiles>这样修改之后,我们在进行开发环境构建的时候,不需要添加额外的参数,直接执行命令mvn clean package即可正常构建。而当我们需要构建其他环境程序包的时候,则在命令后面添加对应的参数。
- 2. Maven Profile 在了解了什么是可移植性之后,那我们来看看 Maven 是如何实现可移植性的。这里就需要介绍 Maven 的一组配置 Profile 。通过使用 Profile 我们就可以实现针对不同环境自定义进行构建。通常情况下,Profile 被定义在 pom.xml 文件中,但是定义的方式也可以有很多种。<profiles> <profile> <id>dev</id> <properties> <database.driver>com.mysql.cj.jdbc.Driver</database.driver> <database.url>jdbc:mysql://localhost:3306/dev</database.url> <database.username>Mic</database.username> <database.password>Abc123</database.password> </properties> </profile> <profile> <id>test</id> <properties> <database.driver>com.mysql.cj.jdbc.Driver</database.driver> <database.url>jdbc:mysql://localhost:3306/test</database.url> <database.username>Mic</database.username> <database.password>Abc123</database.password> </properties> </profile></profiles>这里我们以数据库连接串为例,可以将不同环境中的数据库连接串配置到对应的 profile 节点中,并为每个 profile 节点定义单独的 id 。配置好之后,我们我们在进行构建项目的时候,可以在执行命令的时候,加上参数 -Pdev 来指定对应的配置 :mvn clean package -Pdev。但是问题来了,通常情况下,我们不会把配置信息放到 pom.xml 文件中,这样对于我们管理配置,并不方便。那我们如何在构建的时候,指定使用对应的配置文件来进行构建呢?我们可以对 pom.xml 文件进行简单的修改。<build> <finalName>mall-order</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources/</directory> <!-- 打包时,将对应配置文件先排除 --> <excludes> <exclude>**/*.yml</exclude> </excludes> <includes> <!--如果有其他定义通用文件,需要包含进来--> </includes> </resource> <resource> <!-- 通过自定义的节点来激活指定的配置文件 --> <directory>src/main/resources/${profile.active}</directory> </resource> </resources></build><profiles> <profile> <id>dev</id> <properties> <!-- 自定义节点profile.active--> <profile.active>dev</profile.active> </properties> <!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失--> <activation> <!-- 表示默认激活--> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profile.active>test</profile.active> </properties> </profile></profiles>首先,我们定义 resource 节点用于指定配置文件的目录,并将最后一级目录定义成可配置的。然后,跟刚刚类似,我们开始定义 profiles 节点,只不过这次,我们只是在 properties 节点中自定义了一个节点,与 resource 中的自定义路径相呼应。相应的,我们需要在 resources目录下,创建两个目录,分别为 dev 和 prod 目录,用于存放不同的配置文件。都配置好之后,我们再使用命令 mvn clean package -Pdev 来构建项目。构建完成后,我们查看目录target\classes 会发现,application-dev.yml 配置文件被编译进来,而另一个配置文件并没有被编译进来。这时候,我们的基本上就达成 了。注意:由于我们这里配置的 dev Profile 是默认激活状态的,所以执行 mvn clean package 和 mvn clean package -Pdev 两个命令的结果是相同的。当然,通过配置 profile ,我们不仅仅可以指定激活不同的配置文件,也可以指定构建使用的JDK版本,以及某些操作系统的参数。
properties相关搜索
-
pack
package
package文件
padding
pages
page对象
panda
panel
panel控件
param
parameter
parcel
parent
parentnode
parents
parse
parse error
parseint
partition
pascal