profile 订阅
Profile
信息
操作系统
未知
开发语言
开源协议
未知
Profile
Profiles calls to jQuery(selector) , so that you can see which calls to jQuery are taking time. This plugin is meant to complement tools such as the Firebug profiler, which profile all the function calls in your script, but don't (at present) allow you to drill down into the different arguments to a single call. Call $.profile.start() to start profiling calls to $(selector) , and then $.profile.done() to stop profiling and print out something like this: Selector                 Count  Total  Avg+/-stddev script, script, scri...  100    101ms  1.01ms+/-1.01 script                   200     58ms  0.29ms+/-0.53 html body #output        100     55ms  0.55ms+/-0.74 script, #output          100     54ms  0.54ms+/-0.73 #output                  100      6ms  0.06ms+/-0.24 You can also include the ?jquery.profile.start query parameter in your page URL to begin profiling automatically as soon as the plugin is loaded.
收起全文
精华内容
下载资源
问答
  • Bluetooth PROFILE SPECIFICATIONS

    千次下载 热门讨论 2014-07-24 17:06:05
    蓝牙相关协议,0分免费下载:基本涵盖所有协议 A2DPspecv10.pdf、A2DP_SPEC_V12.pdf、AVCTP_SPEC_V12.pdf、AVDTP_SPEC_V13.pdf、AVRCPSpecv10.pdf、AVRCP_SPEC_V13.pdf 、BIP_SPEC_V10.pdf、BPP_SPEC_V10.pdf、BPP_...
  • Maven profile整合Spring profile

    千次阅读 2019-03-05 16:52:00
    在Maven和Spring中,都有profile这个概念。profile是用于区分各种环境的,例如开发环境、测试环境、正式环境等。Maven的profile用于在打包时根据指定环境替换不同环境的配置文件配置,如数据库配置。Spring的Profile...

    在Maven和Spring中,都有profile这个概念。profile是用于区分各种环境的,例如开发环境、测试环境、正式环境等。Maven的profile用于在打包时根据指定环境替换不同环境的配置文件配置,如数据库配置。Spring的Profile可以用于在不同的环境下加载不同的bean,例如@Profile注解。两者一个是Maven编译和打包时生效,另一个是运行时生效,默认是没有关联的,本文会分别介绍非Spring Boot项目和Spring Boot项目整合Maven profile。

    Maven profile配置

    pom.xml中,可以配置testproduct两个profile,分别对应测试环境和正式环境。这里也可以根据具体情况自定义。

    <profiles>
      <profile>
        <id>test</id>
        ...
      </profile>
      <profile>
        <id>product</id>
        ...
      </profile>
    </profiles>
    

    此时,运行mvn package -Ptest就会使用id为test的profile内的配置打包,mvn package -Pproduct就是用来打正式环境包的命令。

    Spring Framework(非Spring Boot)整合Maven profile

    Spring Framework如何启用一个profile

    Spring启用某个profile有多种方式(摘自官方文档:https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/core.html#beans-definition-profiles-enable ):

    Activating a profile can be done in several ways, but the most straightforward is to do it programmatically against the Environment API which is available through an ApplicationContext.
    In addition, you can also declaratively activate profiles through the spring.profiles.active property, which may be specified through system environment variables, JVM system properties, servlet context parameters in web.xml, or even as an entry in JNDI.

    总结一下有以下几种方式:

    • 通过代码设置:ApplicationContext.getEnvironment().setActiveProfiles("yourProfile")
    • 通过系统环境变量spring.profiles.active值来设置
    • 通过JVM系统属性spring.profiles.active值来设置
    • 通过web.xml中的context-param来设置

    为了便于跟Maven整合,我们使用web.xml来设置Spring profile,如下:

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>product</param-value>
    </context-param>
    

    以上配置会启用Spring的product profile,即正式环境。

    Spring Framework profile整合Maven profile

    如果想要整合Maven profile和Spring Framework profile,需要在Maven打包时对web.xml中的spring.profiles.active值进行替换,可以在web.xml中配置一个占位符${activeProfile}

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>${activeProfile}</param-value>
    </context-param>
    

    pom.xml配置maven-war-plugin

    <!-- 打war包时替换占位符 -->
    <build>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
        </configuration>
      </plugin>
    </build>
    
    <!-- 默认的maven profile -->
    <properties>
      <activeProfile>dev</activeProfile>
    </properties>
    
    <profiles>
      <profile>
        <id>test</id>
        <properties>
          <activeProfile>test</activeProfile>
        </properties>
      </profile>
      <profile>
        <id>product</id>
        <properties>
          <activeProfile>product</activeProfile>
        </properties>
      </profile>
    </profiles>
    

    <filteringDeploymentDescriptors>true表示过滤Deployment Descriptor并将文件中的占位符替换为pom.xml中对应的<properties>值,Deployment Descriptor即部署描述符,指的就是web.xml (参考维基百科:https://zh.wikipedia.org/wiki/部署描述符 )。

    以上配置完成后,再通过mvn package -Ptestmvn package -Pproduct打包后,再解压war包,可以看到web.xml中原有的

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>${activeProfile}</param-value>
    </context-param>
    

    被替换为了Maven中对应的profile,例如mvn package -Pproduct打包后web.xml内容:

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>product</param-value>
    </context-param>
    

    以上就完成了Maven profile和Spring profile的整合。

    兼容jetty-maven-plugin

    如果恰好在项目中使用到jetty-maven-plugin用于开发环境调试,那么在web.xml配置占位符${activeProfile}后,通过mvn jetty:run启动应用时会Spring框架会报错:

    Could not resolve placeholder 'activeProfile' in string value "${activeProfile}"
    

    这是因为运行mvn jetty:run命令时插件并没有打war包,而是直接使用源码中的web.xml,此时占位符${activeProfile}未被maven-war-plugin替换,所以Spring框架会报错。

    参考文档:https://www.eclipse.org/jetty/documentation/9.4.x/jetty-maven-plugin.html#jetty-run-goal

    解决方法一

    使用mvn jetty:run-warmvn jetty:run-exploded命令替代mvn jetty:run,这两个命令会先用maven-war-plugin打好war包后再运行,此时占位符${activeProfile}已被替换为Maven的profile。

    但是这种方案会带来一个问题:由于这种方式需要先打war包再运行,开发时项目中资源(例如html、jsp)修改后就不会实时生效,而是需要重新打包启动,不便于调试。

    解决方法二(推荐)

    这种方案还是使用mvn jetty:run命令,只需要给jetty-maven-plugin插件添加一个名为activeProfile的系统属性,让Spring框架来解析web.xml中的${activeProfile}

    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.2.10.v20150310</version>
      <configuration>
        <webApp>
          <contextPath>/</contextPath>
        </webApp>
        <systemProperties>
          <systemProperty>
            <name>activeProfile</name>
            <value>${activeProfile}</value>
          </systemProperty>
        </systemProperties>
      </configuration>
    </plugin>
    

    参考文档:https://www.eclipse.org/jetty/documentation/9.4.x/jetty-maven-plugin.html#setting-system-properties

    Spring Boot整合Maven profile

    如果项目采用的框架是Spring Boot而不是直接使用Spring Framework,那么Spring Boot的profile可以在resources目录下的application.propertiesapplication.yml文件中指定,以application.properties为例:

    spring.profiles.active=product
    

    要想整合Maven profile只需要改为@activeProfile@占位符即可:

    spring.profiles.active=@activeProfile@
    

    仅需要这一行配置就完成了Spring Boot profile整合Maven profile,非常方便。此时可以尝试mvn package -Ptestmvn package -Pproduct命令打包,安装包内的文件中@activeProfile@占位符已被替换。

    Spring Boot整合Maven profile原理

    Spring Boot项目中一般都会加上spring-boot-starter-parent

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>${spring.boot.version}</version>
    </parent>
    

    可以查看spring-boot-starter-parent的pom.xml文件,里面包含maven-resources-plugin

    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
            <delimiters>
                <delimiter>${resource.delimiter}</delimiter>
            </delimiters>
            <useDefaultDelimiters>false</useDefaultDelimiters>
        </configuration>
    </plugin>
    

    ${resource.delimiter}定义的值是@

    <resource.delimiter>@</resource.delimiter>
    

    这样maven-resources-plugin插件会将application.propertiesapplication.yml文件中的@activeProfile@替换为pom.xml中对应profile的值。

    至于为什么Spring Boot要使用@..@而不是Maven默认的${..}作为占位符的符号,官方文档也给出了解释,以下摘自:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#using-boot-maven

    Note that, since the application.properties and application.yml files accept Spring style placeholders (${…​}), the Maven filtering is changed to use @…@ placeholders. (You can override that by setting a Maven property called resource.delimiter.)

    因为Spring Boot框架本身也用${..}作为占位符,Maven插件maven-resources-plugin如果还使用相同的占位符,那么可能会导致一些冲突,所以spring-boot-starter-parentmaven-resources-plugin的占位符改为@..@

    参考文档

    原文链接

    https://xxgblog.com/2016/06/01/maven-spring-profile/

    展开全文
  • spring Profile

    千次阅读 2019-05-22 11:32:23
    本文从如下3方面探讨Spring的Profile: Spring中的Profile是什么 为什么要使用Profile 如何使用Profile 1.Spring中的Profile 是什么? Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们...

    前言

    本文从如下3方面探讨Spring的Profile:
    • Spring中的Profile是什么
    • 为什么要使用Profile
    • 如何使用Profile

    1.Spring中的Profile 是什么?

    Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们在Spring容器中所定义的Bean的逻辑组名称,只有当这些Profile被激活的时候,才会将Profile中所对应的Bean注册到Spring容器中。举个更具体的例子,我们以前所定义的Bean,当Spring容器一启动的时候,就会一股脑的全部加载这些信息完成对Bean的创建;而使用了Profile之后,它会将Bean的定义进行更细粒度的划分,将这些定义的Bean划分为几个不同的组,当Spring容器加载配置信息的时候,首先查找激活的Profile,然后只会去加载被激活的组中所定义的Bean信息,而不被激活的Profile中所定义的Bean定义信息是不会加载用于创建Bean的。

    2.为什么要使用Profile

    由于我们平时在开发中,通常会出现在开发的时候使用一个开发数据库,测试的时候使用一个测试的数据库,而实际部署的时候需要一个数据库。以前的做法是将这些信息写在一个配置文件中,当我把代码部署到测试的环境中,将配置文件改成测试环境;当测试完成,项目需要部署到现网了,又要将配置信息改成现网的,真的好烦。。。而使用了Profile之后,我们就可以分别定义3个配置文件,一个用于开发、一个用户测试、一个用户生产,其分别对应于3个Profile。当在实际运行的时候,只需给定一个参数来激活对应的Profile即可,那么容器就会只加载激活后的配置文件,这样就可以大大省去我们修改配置信息而带来的烦恼。

    3.配置Spring profile

    在介绍完Profile以及为什么要使用它之后,下面让我们以一个例子来演示一下Profile的使用,这里还是使用传统的XML的方式来完成Bean的装配。

    3.1 例子需要的Maven依赖

    由于只是做一个简单演示,因此无需引入Spring其他模块中的内容,只需引入核心的4个模块+测试模块即可。

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!--指定Spring版本,该版本必须等于3.1-->
            <spring.version>4.2.4.RELEASE</spring.version>
            <!--指定JDK编译环境-->
            <java.version>1.7</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    3.2 例子代码

    package com.panlingxiao.spring.profile.service;
    
    /**
     * 定义接口,在实际中可能是一个数据源
     * 在开发的时候与实际部署的时候分别使用不同的实现
     */
    public interface HelloService {
    
        public String sayHello();
    }
    

    定义生产环境使用的实现类

    package com.panlingxiao.spring.profile.service.produce;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import com.panlingxiao.spring.profile.service.HelloService;
    
    /**
     * 模拟在生产环境下需要使用的类
     */
    @Component
    public class ProduceHelloService implements HelloService {
    
        //这个值读取生产环境下的配置注入
        @Value("#{config.name}")
        private String name;
    
        public String sayHello() {
            return String.format("hello,I'm %s,this is a produce environment!",
                    name);
        }
    }
    
    • 模拟在生产环境下需要使用的类
    package com.panlingxiao.spring.profile.service.dev;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import com.panlingxiao.spring.profile.service.HelloService;
    
    /**
     * 模拟在开发环境下使用类
     */
    @Component
    public class DevHelloService implements HelloService{
    
        //这个值是读取开发环境下的配置文件注入
        @Value("#{config.name}")
        private String name;
    
        public String sayHello() {
            return String.format("hello,I'm %s,this is a development environment!", name);
        }
    }
    

    定义配置Spring配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
    
        <!-- 定义开发的profile -->
        <beans profile="development">
            <!-- 只扫描开发环境下使用的类 -->
            <context:component-scan base-package="com.panlingxiao.spring.profile.service.dev" />
            <!-- 加载开发使用的配置文件 -->
            <util:properties id="config" location="classpath:dev/config.properties"/>
        </beans>
    
        <!-- 定义生产使用的profile -->
        <beans profile="produce">
            <!-- 只扫描生产环境下使用的类 -->
            <context:component-scan
                base-package="com.panlingxiao.spring.profile.service.produce" />
            <!-- 加载生产使用的配置文件 -->    
            <util:properties id="config" location="classpath:produce/config.properties"/>
        </beans>
    </beans>
    

    开发使用的配置文件,dev/config.properties

        name=Tomcat

    生产使用的配置文件,produce/config.properties

    name=Jetty

    编写测试类

    package com.panlingxiao.spring.profile.test;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ActiveProfiles;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.panlingxiao.spring.profile.service.HelloService;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations="classpath:spring-profile.xml")
    /*
     * 使用注册来完成对profile的激活,
     * 传入对应的profile名字即可,可以传入produce或者dev
     */
    @ActiveProfiles("produce")
    public class TestActiveProfile {
    
        @Autowired
        private HelloService hs;
    
        @Test
        public void testProfile() throws Exception {
            String value = hs.sayHello();
            System.out.println(value);
        }
    }
    


    激活dev运行结果.png

    激活produce运行结果.jpg

    4.激活Profile的其他几种方式

    上面介绍了如何使用Profile以及在单元测试的环境下激活指定的Profile,除了使用@ActiveProfiles注解来激活profile外,Spring还提供了其他的几种激活Profile,这些方式在实际的开发中使用的更多。
    Spring通过两个不同属性来决定哪些profile可以被激活(注意:profile是可以同时激活多个的),一个属性是spring.profiles.active和spring.profiles.default。这两个常量值在Spring的AbstractEnvironment中有定义,查看AbstractEnvironment源码:

        /**
         * Name of property to set to specify active profiles: {@value}. Value may be comma * delimited. * <p>Note that certain shell environments such as Bash disallow the use of the period * character in variable names. Assuming that Spring's {@link SystemEnvironmentPropertySource} * is in use, this property may be specified as an environment variable as * {@code SPRING_PROFILES_ACTIVE}. * @see ConfigurableEnvironment#setActiveProfiles */ public static final String ACTIVE_PROFILES_PROPERTY_NAME = "spring.profiles.active"; 
    <span class="hljs-comment">/**
     * Name </span><span class="hljs-keyword"><span class="hljs-comment">of </span><span class="hljs-keyword"><span class="hljs-comment">property </span><span class="hljs-keyword"><span class="hljs-comment">to </span><span class="hljs-keyword"><span class="hljs-comment">set </span><span class="hljs-keyword"><span class="hljs-comment">to specify profiles active </span><span class="hljs-keyword"><span class="hljs-comment">by default: {<span class="hljs-doctag">@value</span>}. Value may
     * be comma delimited.
     * &lt;p&gt;Note </span><span class="hljs-keyword"><span class="hljs-comment">that certain shell environments such </span><span class="hljs-keyword"><span class="hljs-comment">as Bash disallow </span><span class="hljs-keyword"><span class="hljs-comment">the use </span><span class="hljs-keyword"><span class="hljs-comment">of </span><span class="hljs-keyword"><span class="hljs-comment">the period
     * </span><span class="hljs-built_in"><span class="hljs-comment">character </span><span class="hljs-keyword"><span class="hljs-comment">in variable names. Assuming </span><span class="hljs-keyword"><span class="hljs-comment">that Spring's {<span class="hljs-doctag">@link</span> SystemEnvironmentPropertySource}
     * </span><span class="hljs-keyword"><span class="hljs-comment">is </span><span class="hljs-keyword"><span class="hljs-comment">in use, this </span><span class="hljs-keyword"><span class="hljs-comment">property may be specified </span><span class="hljs-keyword"><span class="hljs-comment">as an environment variable </span><span class="hljs-keyword"><span class="hljs-comment">as
     * {<span class="hljs-doctag">@code</span> SPRING_PROFILES_DEFAULT}.
     * <span class="hljs-doctag">@see</span> ConfigurableEnvironment</span><span class="hljs-comment"><span class="hljs-comment">#setDefaultProfiles
     */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String DEFAULT_PROFILES_PROPERTY_NAME = <span class="hljs-string"><span class="hljs-string">"spring.profiles.default"</span>;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
    

    如果当spring.profiles.active属性被设置时,那么Spring会优先使用该属性对应值来激活Profile。当spring.profiles.active没有被设置时,那么Spring会根据spring.profiles.default属性的对应值来进行Profile进行激活。如果上面的两个属性都没有被设置,那么就不会有任务Profile被激活,只有定义在Profile之外的Bean才会被创建。我们发现这两个属性值其实是Spring容器中定义的属性,而我们在实际的开发中很少会直接操作Spring容器本身,所以如果要设置这两个属性,其实是需要定义在特殊的位置,让Spring容器自动去这些位置读取然后自动设置,这些位置主要为如下定义的地方:

    • 作为SpringMVC中的DispatcherServlet的初始化参数
    • 作为Web 应用上下文中的初始化参数
    • 作为JNDI的入口
    • 作为环境变量
    • 作为虚拟机的系统参数
    • 使用@AtivceProfile来进行激活

    我们在实际的使用过程中,可以定义默认的profile为开发环境,当实际部署的时候,主需要在实际部署的环境服务器中将spring.profiles.active定义在环境变量中来让Spring自动读取当前环境下的配置信息,这样就可以很好的避免不同环境而频繁修改配置文件的麻烦。

    4.5 示例代码下载

    示例代码下载地址:Spring-profile-test

    参考:

    1. Spring Framework Reference Documentation 4.2.5.RELEASE-- 6.13. Environment abstraction
    2. Spring Framework Reference Documentation 3.2.3.RELEASE --3.2 Bean Definition Profiles
    3. <<Spring In Action Fourth Edition>>
    展开全文
  • Oracle修改用户profile属性

    千次阅读 2018-12-26 18:30:47
    1、查询profile 2、更改session连接属性 用户Profile详解 一、Profile目的: 二、条件: 三、查看系统的默认PROFILE 四、创建 profile 的语法如下: 五、部分解释: 六、尝试创建一个混合型的PROFILE(包含...

    目录

    更改属性

    1、查询profile

    2、更改session连接属性

    用户Profile详解

    一、Profile目的:

    二、条件:

    三、查看系统的默认PROFILE

    四、创建 profile 的语法如下:

    五、部分解释:

    六、尝试创建一个混合型的PROFILE(包含资源限制和密码限制):  

    七、PROFILE 何时生效

    八、将配置文件分配给用户:

    九、11g oracle 用户密码过期问题


    用户要求更改一下之前创建的用户profile的连接数量限制

    更改属性

    1、查询profile

    SQL> select distinct profile from dba_profiles;

    PROFILE
    --------------------------------------------------------------------------------
    DEFAULT
    ISAP_CRM_SYNC

    SQL>

    2、更改session连接属性

    SQL> alter profile ISAP_CRM_SYNC limit SESSIONS_PER_USER 100;

    Profile altered.

    SQL> 

    alter profile ISAP_CRM_SYNC limit SESSIONS_PER_USER 100;

    alter profile PRODUCT_PROFILE limit FAILED_LOGIN_ATTEMPTS unlimited;

    **********************************************************************************************************

    用户Profile详解

    一、Profile目的:


      Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。具体管理内容有:CPU的时间、I/O的使用、IDLE TIME(空闲时间)、CONNECT TIME(连接时间)、并发会话数量、口令机制等。

     

    二、条件:



      创建profile必须要有CREATE PROFILE的系统权限。为用户指定资源限制,必须:

      1.动态地使用alter system或使用初始化参数resource_limit使资源限制生效。该改变对密码资源无效,密码资源总是可用。 
        SQL> show parameter resource_limit
        SQL> alter system set resource_limit=true; 
      2.使用create profile创建一个定义对数据库资源进行限制的profile。
      3.使用create user 或alter user命令把profile分配给用户。


    三、查看系统的默认PROFILE


      1、通过dba_profiles视图查看一下系统中默认都有哪些PROFILE
      数据库创建以后,系统中只会存在一个名为DEFAULT的默认PROFILE,在用户创建之后,如果不做特殊指定,每个用户的PROFILE都会默认的使用个默认的PROFILE。
      sys@oral> select distinct profile from dba_profiles;

      2、全面查看这个 PROFILE 包含哪些限制定义
      sys@oral> col PROFILE for a12
      sys@oral> col RESOURCE_NAME for a25
      sys@oral> col LIMIT for a15
      sys@oral> select * from dba_profiles order by 1,2;

      3、结论:DEFAULT PROFILE 只对密码的错误尝试次数做了限制(最多可以错误输错10次密码)。如想改变限制条件,有两种方法:第一种方法是对默认的PROFILE做个性化调整;第二种方法是重新定制一个新的PROFILE。


    四、创建 profile 的语法如下:


      CREATE PROFILE profile
      LIMIT { resource_parameters 对资源的限制
        | password_parameters   对密码的限制
        }... ;

      <resource_parameters> 
      {{ SESSIONS_PER_USER   每个用户名并行会话数
       | CPU_PER_SESSION    每会话可用的CPU时间,单位0.01秒
       | CPU_PER_CALL     一次SQL调用(解析、执行和获取)允许的CPU时间
       | CONNECT_TIME     会话连接时间(分钟)
       | IDLE_TIME       会话空闲时间(分钟),超出将断开
       | LOGICAL_READS_PER_SESSION
       | LOGICAL_READS_PER_CALL
       | COMPOSITE_LIMIT   “组合打法”
       }
       { integer | UNLIMITED | DEFAULT }
       | PRIVATE_SGA
       { integer [ K | M ] | UNLIMITED | DEFAULT }
      }

      < password_parameters >
      {{ FAILED_LOGIN_ATTEMPTS 被锁定前的试错次数
       | PASSWORD_LIFE_TIME   密码使用天数,默认180天
       | PASSWORD_REUSE_TIME   密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)
       | PASSWORD_REUSE_MAX   密码最大改变次数(结合PASSWORD_REUSE_TIME)
       | PASSWORD_LOCK_TIME   超过试错次数后,被锁定的天数,默认1天
       | PASSWORD_GRACE_TIME   密码过期后还可使用原密码的天数
       }
       { expr | UNLIMITED | DEFAULT }
       | PASSWORD_VERIFY_FUNCTION
         { function | NULL | DEFAULT }
      }


    五、部分解释:


      profile:配置文件的名称。Oracle数据库以以下方式强迫资源限制:
      1.如果用户超过了connect_time或idle_time的会话资源限制,数据库就回滚当前事务,并结束会话。用户再次执行命令,数据库则返回一个错误
      2.如果用户试图执行超过其他的会话资源限制的操作,数据库放弃操作,回滚当前事务并立即返回错误。用户之后可以提交或回滚当前事务,必须结束会话。 
      提示:可以将一条分成多个段,如1小时(1/24天)来限制时间,可以为用户指定资源限制,但是数据库只有在参数生效后才会执行限制。 

      Unlimited:分配该profile的用户对资源使用无限制,当使用密码参数时,unlimited意味着没有对参数加限制。 
      Default:指定为default意味着忽略对profile中的一些资源限制,Default profile初始定义对资源不限制,可以通过alter profile命令来改变。 

      Resource_parameter部分

      Logical_reads_per_session:每会话允许读的数据块的数目,包括从内存和磁盘读的所有数据块。 
      Logical_read_per_call:一次执行SQL(解析、执行和提取)调用允许读的数据块最大数目。
      Private_sga:指定一个会话可以在共享池(SGA)中所允许分配的最大空间,以字节为单位。(该限制只在使用共享服务器结构时才有效,会话在SGA中的私有空间包括私有的SQL和PL/SQL,但不包括共享的SQL和PL/SQL)。
      Composite_limit:指定一个会话的总的资源消耗,以service units单位表示。Oracle数据库以有利的方式计算cpu_per_session,connect_time,logical_reads_per_session和private-sga总的service units

      Password_parameter部分:

      Password_life_time:指定同一密码所允许使用的天数。如果同时指定了password_grace_time参数,如果在grace period内没有改变密码,则密码会失效,连接数据库被拒绝。如果没有设置password_grace_time参数,默认值unlimited将引发一个数据库警告,但是允许用户继续连接。

      Password_reuse_time和password_reuse_max:这两个参数必须互相关联设置,password_reuse_time指定了密码不能重用前的天数,而password_reuse_max则指定了当前密码被重用之前密码改变的次数。两个参数都必须被设置为整数。
      1.如果为这两个参数指定了整数,则用户不能重用密码直到密码被改变了password_reuse_max指定的次数以后在password_reuse_time指定的时间内。
      如:password_reuse_time=30,password_reuse_max=10,用户可以在30天以后重用该密码,要求密码必须被改变超过10次。 
      2.如果指定了其中的一个为整数,而另一个为unlimited,则用户永远不能重用一个密码。
      3.如果指定了其中的一个为default,Oracle数据库使用定义在profile中的默认值,默认情况下,所有的参数在profile中都被设置为unlimited,如果没有改变profile默认值,数据库对该值总是默认为unlimited。
      4.如果两个参数都设置为unlimited,则数据库忽略他们。

      Password_grace_time:指定宽限天数,数据库发出警告到登陆失效前的天数。如果数据库密码在这中间没有被修改,则过期会失效。
      Password_verify_function:该字段允许将复杂的PL/SQL密码验证脚本做为参数传递到create profile语句。Oracle数据库提供了一个默认的脚本,但是自己可以创建自己的验证规则或使用第三方软件验证。 对Function名称,指定的是密码验证规则的名称,指定为Null则意味着不使用密码验证功能。如果为密码参数指定表达式,则该表达式可以是任意格式,除了数据库标量子查询。 


    六、尝试创建一个混合型的PROFILE(包含资源限制和密码限制):
      


      sys@oral> CREATE PROFILE sec_profile LIMIT
      2     SESSIONS_PER_USER          UNLIMITED
      3     CPU_PER_SESSION            UNLIMITED
      4     CPU_PER_CALL               6000
      5     CONNECT_TIME               60
      6     LOGICAL_READS_PER_SESSION  DEFAULT
      7     LOGICAL_READS_PER_CALL     6000
      8     COMPOSITE_LIMIT            6000000
      9     PRIVATE_SGA                66K
      10    FAILED_LOGIN_ATTEMPTS      6
      11    PASSWORD_LIFE_TIME         60
      12    PASSWORD_REUSE_TIME        60
      13    PASSWORD_REUSE_MAX         5
      14    PASSWORD_LOCK_TIME         1/24
      15    PASSWORD_GRACE_TIME        10
      16    PASSWORD_VERIFY_FUNCTION   verify_function
      17  /
      CREATE PROFILE sec_profile LIMIT
      *
      ERROR at line 1:
      ORA-07443: function VERIFY_FUNCTION not found

      出错原因:VERIFY_FUNCTION函数不存在,要事先创建该函数,VERIFY_FUNCTION函数是通过utlpwdmg.sql脚本创建的,该脚本所在的目录是$ORACLE_HOME/rdbms/admin/

      使用utlpwdmg.sql脚本创建 VERIFY_FUNCTION 密码复杂度校验函数:
      sys@oral> @?/rdbms/admin/utlpwdmg.sql
      Function created.
      Profile altered.

      脚本中,verify_function 函数的密码复杂性校验规则如下:
      1)密码最小长度为4个字符
      2)密码不能和用户名相同
      3)密码要包含至少一个字符、一个数字和一个特殊字符
      4)密码需要至少有3个字符与之前的口令不相同

      实验中使用了几乎所有参数,惟一没有包含的是IDLE_TIME,它将继承 DEFALT 中的定义
      对上面创建的PROFILE逐行做一下诠释,以便加深理解:
      第 2行:对用户的并发连接会话数不做限制
      第 3行:对于连接到用户的每一个session的CPU时间的使用不做限制
      第 4行:一次调用消耗的CPU时间不能超过60秒(不超过一分钟)
      第 5行:连接到用户的每次会话时间不能超过60分钟(不超过一个小时)
      第 6行:一次会话使用的物理读与逻辑读数据块总量与DEFAULT profile中定义保持一致
      第 7行:一次调用使用的物理读与逻辑读数据块总量不超过6000个数据块
      第 8行:一次会话总的资源消耗不超过6000000个服务单元(service units)
      第 9行:一次会话在SGA中不能分配超过66K的空间
      第10行:帐户被锁定之前允许6次的错误尝试
      第11行:超过此生命周期后密码作废
      第12行:密码重用时间60天
      第13行:密码重用之前密码需要完成5次改变
      第14行:超过错误尝试次数后,用户将被锁定1小时
      第15行:当密码过期之后原密码还可以使用10天
      第16行:使用密码复杂度校验函数verify_function对密码做检查

      第12行和第13行,两个策略搭配使用后,只有完成 5 次密码修改且已超过60天后,之前的密码才能被再次使用

      删除 PROFILE 很简单,语法:DROP PROFILE profile [CASCADE];
      如果创建的PROFILE已经授权给了具体的用户,则需用CASCADE选项级联的收回相应限制,在收回这些限制信息后将以系统默认的PROFILE对该用户进行限制。


    七、PROFILE 何时生效


      PROFILE中有关密码的限制永远生效,不受限制。
      PROFILE中有关资源的限制与resource_limit参数的设置有关,为TRUE时生效,为FALSE时(默认)无效。


    八、将配置文件分配给用户:


      SQL> alter user dinya profile sec_profile;
      SQL> alter user dinya profile default;
      SQL> select USERNAME,PROFILE from dba_users where USERNAME = 'dinya';


    九、11g oracle 用户密码过期问题


      11g之前版本,默认用户没有密码过期限制,在Oracle 11g 中默认 profile 密码过期时间是180天

      检查:select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
      过期的密码可用 alter user userXXX identified by xxx; 解决,可修改为和以前一样

      如果想设置密码不过期,可用管理员登陆,执行下面命令:
      ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

      其他相关参数:
      select * from dba_profiles where profile='DEFAULT' and RESOURCE_NAME like 'PASSWORD%';

    展开全文
  • Android Work Profile

    千次阅读 2020-04-08 17:42:39
    本文基于 ... Work Profile(工作面)或称为managed profile(被管理面)。 一个work profile由IT admin控制 一个work profile的可用功能基于用户的primary profile分别设置 Work profile...

    本文基于 https://developer.android.google.cn/work/managed-profiles 翻译而成

     

    Work Profile(工作面)或称为managed profile(被管理面)。

    一个work profile由IT admin控制

    一个work profile的可用功能基于用户的primary profile分别设置

    Work profile功能允许组织控制公司特制应用和数据在用户设备上的运行环境,同时仍允许用户使用其个人的应用和profiles

    概述

    用户经常使用其个人设备处理公司事务(Users often want to use their personal devices in an enterprise setting.)。该情形可能使公司面临一种困境,即由于个人设备不受控制,公司不得不担心机密信息通过用户个人设备被泄露出去。

      如果设备有了work profile,则存在以下可能的影响。

    默认大部分intent是无法跨越profile的。如果一个应用(app)发出的intent在其所在的profile中不存在,且不被允许跨越profile调用,则该应用(app)会因为请求intent失败而异常终止。

    IT admin也能限制work profile中哪些应用(app)是有效的,这种限制也会造成work profile中的应用(app)无法处理常用intent请求

    由于工作profile和个人profile使用独立的存储空间,所以一个profile的文件URI在另一个profile中往往是无效的,所以附带文件URI参数的intent请求是不安全的。

    防止intent失败

    (第一段赘述前文,略)

    Profile admin可控制哪些intent可跨越profile。用户无法预知这些设定,且IT admin可随时改变这些策略。

    在应用(app)启动一个activity前,应该调用Intent.resolveActivity()来验证是否intent可被接受。如果不能接受,则该调用返回空(null),如果返回非空,则说明该profile内存在至少一个有效activity来处理该intent请求,或是该intent被允许跨越profile被处理

    例如,如果要设置时钟,需要先验证是否能处理ACTION_SET_TIMER。如果不能,应该给予适当的处理,如显示错误消息。

    Kotlin

    fun startTimer(message: String, seconds: Int) {

        // Build the "set timer" intent
        val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
            putExtra(AlarmClock.EXTRA_MESSAGE, message)
            putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            putExtra(AlarmClock.EXTRA_SKIP_UI, true)
        }

        // Check if there's a handler for the intent
        if (timerIntent.resolveActivity(packageManager) == null) {

            // Can't resolve the intent! Fail this operation cleanly
            // (perhaps by showing an error message)

        } else {
            // Intent resolves, it's safe to fire it off
            startActivity(timerIntent)

        }
    }

    Java

    public void startTimer(String message, int seconds) {

        // Build the "set timer" intent
        Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER)
                .putExtra(AlarmClock.EXTRA_MESSAGE, message)
                .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
                .putExtra(AlarmClock.EXTRA_SKIP_UI, true);

        // Check if there's a handler for the intent
        if (timerIntent.resolveActivity(getPackageManager()) == null) {

            // Can't resolve the intent! Fail this operation cleanly
            // (perhaps by showing an error message)

        } else {
            // Intent resolves, it's safe to fire it off
            startActivity(timerIntent);

        }
    }

    跨越profile共享文件

    有时一个应用(app)需要给予其他应用(app)对自身文件的访问权限,例如。一个图库app向图片编辑app共享其文件。一般采用两种实现方式:file URI和content URI。

    “file URI”是一个以”file:”为前缀,后接文件绝对路径的字符串。但不同profile使用独立的存储空间,所以一个profile的 “file URI”在另一个profile中往往是无效的,将导致无法访问。

    为解决该问题,你应该使用content URI,它以更安全的方式实现文件共享。它不仅含有文件路径,还有content ID。你可以用FileProvider来生成这个ID。通过共享content ID,其他app即使不在相同的profile,也可以访问到实际的文件。以下是例子。

    Kotlin

    // Open File object from its file URI
    val fileToShare = File(fileUriToShare)

    val contentUriToShare: Uri = FileProvider.getUriForFile(
            context,
            "com.example.myapp.fileprovider",
            fileToShare
    )

    Java

    // Open File object from its file URI
    File fileToShare = new File(fileUriToShare);

    Uri contentUriToShare = FileProvider.getUriForFile(getContext(),
            "com.example.myapp.fileprovider", fileToShare);

    当你调用 getUriForFile() 方法,你必须包含文件提供者的authority,上面的例子中是com.example.myapp.fileprovider。详情请参考Sharing Files

    监听通知

      一个应用(app)往往提供NotificationListenerService 子类来接受系统的回调。含work profile的设备可能影响该工作机制。

    在work profile中

    你无法使用NotificationListenerService服务,系统会忽略work profile中应用的NotificationListenerService

    在personal profile中

    运行在personal profile的应用无法收到work profile的应用发出的通知,除非IT admin将其列入白名单。

    从Android8.0(API level 26)起,DPC(device policy Controller)管理work profile,它提供DevicePolicyManager方法setPermittedCrossProfileNotificationListeners()阻止你的应用(app)监听来自work profile的通知。

    测试应用(app)对work profile的兼容性

    Google提供例程BasicManagedProfile,你能用它在Android5.0(API level 21)及更高版本设备上设置一个work profile。它提供简单的方法测试你的app在work profile环境中的表现。你也能用它来配置work profile

    • 在被管理的profile中指定有效的缺省app
    • 指定可以跨越work profile的intent

    如果你通过usb连接手动安装一个应用(app),则该应用(app)即安装在personal profile,也安装在work profile。安装完成后,你能在以下条件下测试它。

    • 如果缺省app原本会处理某个intent,则在work profile中禁用那个缺省app,然后验证能正常处理该intent的app。(意思比较模糊)
    • 如果你发出一个intent并期望它被其他app处理,那就使能和禁用intent的权限来使其跨越profile。如果不允许某个intent跨越profile,则也在两种情况下测试。例如,如果你的app发出一个地图类intent,则在以下场景下测试。
      • 设备允许地图intent跨越profile,且另一侧profile中有合适的app。
      • 设备不允许地图intent跨越profile,app所在profile中有合适的app。
      • 设备不允许地图intent跨越profile, app所在profile中没有合适的app。
    • Intent中附带content URI,检查在可跨越profile及相反情形下是否可以访问。

    有关测试的小技巧

    在测试中使用以下小技巧可能对你有所帮助。

    • 如前所述,app会同时安装在两个profile中,你能删除任何一侧的app而保留另一侧。
    • Android Debug Bridge (adb)的很多activity manager命令支持--user选项,它用于让你以指定用户执行,你可以选择unmanaged primary user 或 work profile,详情参见ADB Shell Commands
    • 为了用“list users”命令找出设备上所有活跃用户,输出字符串中第一个数字式用户ID,你可以用这个ID作为--user选项的参数

    例如,先运行以下指令列出设备上所有用户:

    $ adb shell pm list users

    UserInfo{0:Drew:13} running

    UserInfo{10:Work profile:30} running

    本例中主用户("Drew")的用户ID是0, work profile 的用户ID是10。 要在work profile中执行app,你应按照如下方式调用命令:

    $ adb shell am start --user 10 \

    -n "com.example.myapp/com.example.myapp.testactivity" \

    -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

     

    展开全文
  • Spring Boot Profile 与Maven Profile 集成实践  2017-07-04  SPRING BOOT  MAVEN 文章目录 1. 摘要 2. 集成的意义 3. Maven Filter 3.1. Filtering 3.2. Spring Boot Resource 插件的默认...
  • 对于蓝牙Profile的理解

    千次阅读 2019-06-26 17:19:09
    什么是Profile? 众所周知,蓝牙中有很多的profile,我们接触和学习蓝牙相关的开发不可避免的需要弄懂什么是Profile ,但它对于新手而言似乎没那么容易弄懂,即使是有经验者也很难形象的描述profile的含义,这里我...
  • 0、前言 项目环境部署是自己的薄弱项,一些简单的服务,照着搜索来的步骤能凑合部署成功,...要配置环境变量,就要用到什么bashrc或bash_profile文件,可是这文件有啥区别,一直不明白,今天看到这篇文章,结合自己...
  • Linux下 /etc/profile 和 . profile 文件

    千次阅读 2019-01-21 18:12:32
    etc目录下的profile文件是每一个用户登录时,操作系统首先执行的文件,然后再将控制权交给用户主目录下的.profile文件,当系统给出主提示符($PS1)后,用户就可以开始自己的工作了。以上全过程对用户而言是透明的。/etc/...
  • 一、什么是Profile Owner 因为Profile Owner在体验上与Device Owner和Device admin有很大的差别,所以额外添加了一段讲解什么是Profile Owner。 google为了Android在企业中运用推出的安全方案,即android for work,...
  • 4、Spring profile与Maven Profile 融合二者,取长补短 实现多环境打包 5、成果展现 6、总结 7、参考文章 1、使用场景 因为实际项目之中,经常使用到针对不同环境进行相关的打包。于是趁最近一段时间比较闲。...
  • FLUENT-UDF日记-15-DEFINE_PROFILE

    千次阅读 2020-05-02 11:05:17
    day 152.3.23. DEFINE_PROFILEexample 1-压力分布example 2-速度、湍流动能和湍流耗散率分布example 3-固定速度UDFexample 4-壁面产热率分布example 5-作为物理流动时间函数的...DEFINE_PROFILE可以定义随空间坐标...
  • 今日头条数据部资深工程师丁海峰介绍今日头条 user profile 系统的现状,面临的问题,系统演进,以及技术架构中的关键问题: 1. 如何结合 batch 计算与 streaming 计算模型,实现 user profile 的分钟级更新; 2. ...
  • profile介绍

    千次阅读 2017-03-28 11:41:41
    profile介绍 4.1 profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置...
  • 完整的蓝牙应用协议。。包括各种版本的应用协议, 如a2dp的1.0、1.1和1.2版本等。 所需的就是有用的,希望给大家用上~!我们的祖国是花园~! 蓝牙应用在4.0之前为标准蓝牙,4.0之后为BLE(低功耗蓝牙)。...
  • Profile多环境下Profile 在实际项目发布流程中,往往会涉及到多个环境下各类配置的切换。在Spring Boot中提供了多种机制允许开发者进行自行的定制和设置。 profile是用来描述某个环境下的配置信息的总称,包括:...
  • 设置用户环境变量 输入命令:vim ~/.bash_profile,打开文件,输入如下内容: 范例(设置maven环境变量): export M2_HOME=~/apache-maven-3.5.2 export PATH=$PATH:$M2_HOME/bin 退出并保存:esc =&...
  • 关于“.bash_profile”和“.bashrc”区别的总结

    万次阅读 多人点赞 2018-03-28 16:45:24
    0、前言 项目环境部署是自己的薄弱项,一些简单的服务,照着搜索来的步骤能凑合部署成功,...要配置环境变量,就要用到什么bashrc或bash_profile文件,可是这文件有啥区别,一直不明白,今天看到这篇文章,结合自己...
  • %USERPROFILE%这个路径比较特别,它不是一个普通的文件夹,而是用户配置文件的根目录,用户的所有特定数据,包括文件和注册表信息都保存在这里。 由于这个特殊性,每个用户的配置文件位置没有保存在用户自己的...
  • Onvif Profile简介

    千次阅读 2019-09-10 20:11:12
    OnvifProfile简介 https://www.onvif.org/profiles/ ONVIF Profiles是什么? ONVIF提供很多的profile概要文件,用于规范ONVIF设备端与ONVIF客户端的通信标准。目前已发布的profile文件主要包括profile S、G、C、...
  • 为使Bash更好地为我们服务,我们需定制bash shell环境。   ...其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne She...
  • Springboot中的@Profile注解

    千次阅读 2020-04-25 12:30:52
    在项目运行中,包括多种环境,例如线上环境prod、开发环境dev、测试环境test、提测环境qa、单元测试unitest等等。不同的环境需要进行不同的配置,...Spring Boot 对此提供了支持,一方面是注解@Profile,另一方面...
  • 联想键盘必须按下FN键,F1-F12才能生效。为了去掉这个恶心的设计,请安装此官方驱动,然后打开lenovo low profile usb keyboard的界面,勾选使用标准功能,即可生效。
  • 使用maven的profile构建不同环境配置

    万次阅读 2018-02-27 14:19:03
    最近使用到了maven的profile功能,发现这个功能的确很好用也很实用,这块的知识比较多也比较乱,其实真正理解了之后非常简单,为了巩固总结知识,有个更清晰的知识体系,本文诞生了,希望能让像我一样零基础的小白一...
  • maven(三)最详细的profile的使用

    万次阅读 多人点赞 2018-11-08 23:11:03
    注意,每个文件夹里还定义了application-{xxx}.properties件,这里相当于结合springboot的Profile的使用,是我比较推荐的方式,和本文maven的profile使用无关系,在application.properties都有spring.profiles....
  • 详解Spring中的Profile

    千次阅读 2017-05-08 20:20:34
    前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、...因此就想到使用Spring中的Profile来解决上面描述的问题,并且在此记录一下其使用的方式,如果有不
  • [醉了]解决重启mac但是bash_profile不生效的彻底解决方法
  • OpenGL的Context(Profile

    千次阅读 2018-01-12 18:01:50
    但是ARB_compatibility有许多问题:它将OpenGL的核心函数core profile和之前的固定管线函数绑定在了一个合集内,也就是说实现core profile函数集不能包含compatibility中不存在的函数,用户不能够要求一种Context只...
  • maven使用profile动态配置(IDEA演示)

    千次阅读 2019-05-23 18:35:45
    使用Maven的profile来切换不同环境(开发/测试/发布生产)的配置文件 原理简介 通过把不同环境的配置参数信息,放到不同环境的配置文件里(例如:dev.properties开发环境配置文件).Maven在打包的时候根据选择不同的环境...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 745,085
精华内容 298,034
关键字:

profile