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.
收起全文
精华内容
下载资源
问答
  • 2022-03-05 17:40:23

    conan: profile template功能实现不同平台下profile的统一

    之前我写过的两篇博客《conan入门(十):Windows下Android NDK交叉编译Boost》,.《conan入门(十一):Linux下Android NDK交叉编译Boost》中介绍了在Linux和Windows下NDK交叉编译boost的过程

    在这两篇博客中针对Linux和Windows平台我定义了不同的profile文件,因为Linux和Windows的路径换行符不同,而且Linux和Windows下clang编译器可执行文件的后缀也不同(Windows下为.cmd)。更重要的是不同的平台下Android NDK的安装位置也不同。

    但因为这些平台的微小差异就要定义不同的profile,也是不方便维护的。如果我把这个profile给我的同事,他必须根据平台和NDK安装位置,修改profile才能正常使用。

    有没有办法使用不同平台使用同一个profile来实现NDK交叉编译呢?

    有的,这就要用到Conan profile文件支持的模板功能(template)–《Profile templates》

    从Conan 1.38 开始,可以使用jinja2模板引擎进行配置文件。通过使用.jinja扩展名命名配置文件来启用此功能。当conan加载带有.jinja扩展名的配置文件时,立即解析并渲染模板生成标准的profile。

    jinja2支持基本的if-else条件判断以及字符操作,也就是说可以完全使用jinja2语法改造动态生成适应当前平台的profile

    所以代价就是要学会使用jinja2模板

    在网上找到了jinja2模板的使用文档–《Template Designer Documentation》,花了点时间学习了一下,将原来的android_armv7a_clang 模板改名为android_armv7a_clang.jinja,以下是profile完整内容:

    android_armv7a_clang.jinja

    include(default)
    # 获取当前平台名并转为小写,linux,windows,darwin....
    {% set osname = platform.system() | lower %}
    # 获取当前CPU架构名称:x86,x86_64,
    # 如果在windows平台返回的是AMD64则转为x86_64
    {% set arch = {"AMD64": "x86_64"}.get(platform.machine(), platform.machine()) %}
    {% if platform.system() == "Windows" %}
    {% set exe_suffix = ".cmd" %}
    {% endif %}
    # 从环境变量ANDROID_NDK中读取Android NDK安装位置
    android_ndk={{ os.getenv("ANDROID_NDK") }}
    target_host=armv7a-linux-androideabi
    api_level=16
    [settings]
    arch=armv7
    build_type=Release
    compiler=clang
    compiler.libcxx=c++_static
    #compiler.libcxx=c++_shared
    compiler.version=8
    os=Android
    os.api_level=$api_level
    #[tool_requires]
    [options]
    {% if platform.system() == "Windows" %}
    boost:addr2line_location=$android_ndk\toolchains\llvm\prebuilt\windows-x86_64\bin\x86_64-linux-android-addr2line.exe
    {% endif %}
    boost:without_stacktrace=True
    [env]
    # 根据前面的osname和arch变量拼接生成交叉编译器路径
    {% set bin_path = "$android_ndk/toolchains/llvm/prebuilt/"~osname~"-"~arch~"/bin" %}
    {% if platform.system() == "Windows" %}
    # windows下替换路径分割符
    PATH=[{{ bin_path | replace("/","\\") }}]
    {% else %}
    PATH=[{{ bin_path }}]
    {% endif %}
    CHOST=$target_host
    AR=arm-linux-androideabi-ar
    AS=arm-linux-androideabi-as
    RANLIB=arm-linux-androideabi-ranlib
    CC=$target_host$api_level-clang{{ exe_suffix }}
    CXX=$target_host$api_level-clang++{{ exe_suffix }}
    LD=arm-linux-androideabi-ld
    STRIP=arm-linux-androideabi-strip
    {% set toolchain = "$android_ndk/build/cmake/android.toolchain.cmake" %}
    {% if platform.system() == "Windows" %}
    # windows下替换路径分割符
    CONAN_CMAKE_TOOLCHAIN_FILE={{ toolchain | replace("/","\\") }}
    {% else %}
    CONAN_CMAKE_TOOLCHAIN_FILE={{ toolchain }}
    {% endif %}
    CONAN_CMAKE_GENERATOR="Unix Makefiles"
    [conf]
    tools.android:ndk_path=$android_ndk
    

    只要正确定义了ANDROID_NDK环境变量,android_armv7a_clang.jinja 在Windows,Linux,macOS下都可以正常使用

    $ conan install boost/1.69.0@ -pr:h android_armv7a.jinja -pr:b default --build boost --build zlib --build bzip2 --build  libiconv
    

    参考资料

    conan 文档:《Profile templates》

    jinja2语法:《Template Designer Documentation》

    conan系列文章

    《conan入门(一):conan 及 JFrog Artifactory 安装》
    《conan入门(二):conan 服务配置-密码管理及策略》
    《conan入门(三):上传预编译的库(artifact)》
    《conan入门(四):conan 引用第三方库示例》
    《conan入门(五):conan 交叉编译引用第三方库示例》
    《conan入门(六):conanfile.txt conanfile.py的区别》
    《conan入门(七):将自己的项目生成conan包》
    《conan入门(八):交叉编译自己的conan包项目》
    《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》
    《conan入门(十):Windows下Android NDK交叉编译Boost》
    《conan入门(十一):Linux下Android NDK交叉编译Boost》
    《conan入门(十二):Windows NDK 编译 boost报错:CMake was unable to find a build program … MinGW Makefile》
    《conan入门(十三):conan info 命令的基本用法》
    《conan入门(十四):conan new 命令的新特性–模板功能(–template)》
    《conan入门(十五):AttributeError: ‘CMake‘ object has no attribute ‘definitions‘》
    《conan入门(十六):profile template功能实现不同平台下profile的统一》
    《conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板》
    《conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require》
    《conan入门(十九):封装第三方开源库cpp_redis示例》
    《conan入门(二十):封装只包含头文件(header_only)的库示例》
    《conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c》
    《conan入门(二十二):编译 openssl要求python 3.7以上版本》
    《conan入门(二十三):Windows下MinGW编译libcurl》
    《conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查》
    《conan入门(二十五):imports将包安装到本地项目或其他指定位置》

    更多相关内容
  • 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/

    展开全文
  • SpringBoot - Spring Boot 中的配置体系Profile全面解读

    千次阅读 热门讨论 2021-05-16 10:25:56
    文章目录PreSpring Boot 中的配置体系配置文件与 Profile主 application.properties 中指定激活的ProfileProfile 配置信息只保存在一个文件java –jar 激活Profile代码控制与Profile常见配置场景和内容 Pre 配置...

    在这里插入图片描述


    Pre

    配置体系是基于 Spring Boot 框架开发应用程序的基础,而自动配置也是该框架的核心功能之一,梳理使用 Spring Boot 配置体系的系统方法.

    接下来,我们为这个代码工程添加一些支持 RESTful 风格的 HTTP 端点,在这里我们同样创建一个 CustomerController 类,如下所示

    @RestController
    @RequestMapping(value="customers")
    public class CustomerController {
    
        @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    
         public CustomerTicket getCustomerTicketById(@PathVariable Long id) {        
    
            CustomerTicket customerTicket = new CustomerTicket();
            customerTicket.setId(1L);
            customerTicket.setAccountId(100L);
            customerTicket.setOrderNumber("Order00001");
            customerTicket.setDescription("DemoOrder");
            customerTicket.setCreateTime(new Date());
            return customerTicket;
    
        }
    
    }
    
    

    请注意,这里是为了演示方便,我们才使用了硬编码完成了一个 HTTP GET 请求的响应处理。

    现在 RESTful 端点已经开发完成,我们需要对这个应用程序进行打包。基于 Spring Boot 和 Maven,当我们使用 mvn package 命令构建整个应用程序时,将得到一个 customerservice-0.0.1-SNAPSHOT.jar 文件,而这个 jar 文件就是可以直接运行的可执行文件,内置了 Tomcat Web 服务器。也就是说,我们可以通过如下命令直接运行这个 Spring Boot 应用程序:

    java –jar customerservice-0.0.1-SNAPSHOT.jar
    

    通过 Postman 访问“http://localhost:8083/customers/1”端点,可以得到如下图所示的HTTP响应结果,说明整个服务已经启动成功。
    在这里插入图片描述


    Spring Boot 中的配置体系

    在 Spring Boot 中,其核心设计理念是对配置信息的管理采用约定优于配置。在这一理念下,则意味着开发人员所需要设置的配置信息数量比使用传统 Spring 框架时还大大减少。

    当然,今天我们关注的主要是如何理解并使用 Spring Boot 中的配置信息组织方式,这里就需要引出一个核心的概念,即 Profile。


    配置文件与 Profile

    Profile 本质上代表一种用于组织配置信息的维度,在不同场景下可以代表不同的含义。例如,如果 Profile 代表的是一种状态,我们可以使用 open、halfopen、close 等值来分别代表全开、半开和关闭等。再比如系统需要设置一系列的模板,每个模板中保存着一系列配置项,那么也可以针对这些模板分别创建 Profile。这里的状态或模版的定义完全由开发人员自主设计,我们可以根据需要自定义各种 Profile,这就是 Profile 的基本含义。

    为了达到集中化管理的目的,Spring Boot 对配置文件的命名也做了一定的约定,分别使用 label 和 profile 概念来指定配置信息的版本以及运行环境,其中 label 表示配置版本控制信息,而 profile 则用来指定该配置文件所对应的环境

    在 Spring Boot 中,配置文件同时支持 .properties 和 .yml 两种文件格式,结合 label 和 profile 概念,如下所示的配置文件命名都是常见和合法的:

    /{application}.yml
    
    /{application}-{profile}.yml
    
    /{label}/{application}-{profile}.yml
    
    /{application}-{profile}.properties
    
    /{label}/{application}-{profile}.properties
    
    

    Yaml 的语法和其他高级语言类似,并且可以非常直观地表达各种列表、清单、标量等数据形态,特别适合用来表达或编辑数据结构和各种配置文件。在这里,我们指定了如下所示的数据源配置,这里使用了 . yml 文件,如下所示:

    spring: 
    
      datasource:
    
        driver-class-name: com.mysql.cj.jdbc.Driver
    
        url: jdbc:mysql://127.0.0.1:3306/account
    
        username: root
    
    	password: root
    
    

    如果采用 .propertie 配置文件,那么上述配置信息将表示为如下的形式:

    spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
    
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/account
    
    spring.datasource.username=root 
    
    spring.datasource.password=root
    
    

    显然,类似这样的数据源通常会根据环境的不同而存在很多套配置。假设我们存在如下所示的配置文件集合:

    在这里插入图片描述

    注意,这里有一个全局的 application.yml 配置文件以及多个局部的 profile 配置文件

    主 application.properties 中指定激活的Profile

    那么,如何指定当前所使用的那一套配置信息呢?

    在 Spring Boot 中,我们可以在主 application.properties 中使用如下的配置方式来激活当前所使用的 Profile:

    spring.profiles.active = test
    
    

    上述配置项意味着系统当前会读取 application-test.yml 配置文件中的配置内容。同样,如果使用 .yml 文件,则可以使用如下所示的配置方法:

    spring:
    
      profiles:
    
        active: test
    
    

    事实上,我们也可以同时激活几个 Profile,这完全取决于你对系统配置的需求和维度:

    spring.profiles.active: prod, myprofile1, myprofile2
    

    Profile 配置信息只保存在一个文件

    当然,如果你想把所有的 Profile 配置信息只保存在一个文件中而不是分散在多个配置文件中, Spring Boot 也是支持的,需要做的事情只是对这些信息按 Profile 进行组织、分段,如下所示:

    spring: 
    
             profiles: test
    
             #test 环境相关配置信息
    
     
    
    spring: 
    
             profiles: prod
    
             #prod 环境相关配置信息
    
    

    推荐按多个配置文件的组织方法管理各个 Profile 配置信息,这样才不容易混淆和出错。


    java –jar 激活Profile

    最后,如果我们不希望在全局配置文件中指定所需要激活的 Profile,而是想把这个过程延迟到运行这个服务时,那么我们可以直接在 java –jar 命令中添加“–spring.profiles.active”参数,如下所示

    java –jar customerservice-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
    
    

    这种实现方案在通过脚本进行自动化打包和部署的场景下非常有用。


    代码控制与Profile

    在 Spring Boot 中,Profile 这一概念的应用场景还包括动态控制代码执行流程。为此,我们需要使用 @Profile 注解,先来看一个简单的示例。

    @Configuration
    
    public class DataSourceConfig {
    
     
    
        @Bean
    
        @Profile("dev")
    
        public DataSource devDataSource() {
    
            //创建 dev 环境下的 DataSource 
    
        }
    
     
    
        @Bean()
    
        @Profile("prod")
    
        public DataSource prodDataSource(){
    
            //创建 prod 环境下的 DataSource 
    
        }
    
    }
    
    

    可以看到,我们构建了一个 DataSourceConfig 配置类来专门管理各个环境所需的 DataSource。注意到这里使用 @Profile 注解来指定具体所需要执行的 DataSource 创建代码,通过这种方式,可以达到与使用配置文件相同的效果。

    更进一步,能够在代码中控制 JavaBean 的创建过程为我们根据各种条件动态执行代码流程提供了更大的可能性。

    例如,在日常开发过程中,一个常见的需求是根据不同的运行环境初始化数据,常见的做法是独立执行一段代码或脚本。基于 @Profile 注解,我们就可以将这一过程包含在代码中并做到自动化,如下所示:

    @Profile("dev")
    
    @Configuration
    
    public class DevDataInitConfig {
    
     
    
    @Bean
    
      public CommandLineRunner dataInit() { 
    
        return new CommandLineRunner() {
    
          @Override
    
          public void run(String... args) throws Exception {
    
            //执行 Dev 环境的数据初始化
    
        };  
    
    }
    
    

    这里用到了 Spring Boot 所提供了启动时任务接口 CommandLineRunner,实现了该接口的代码会在 Spring Boot 应用程序启动时自动进行执行 。

    @Profile 注解的应用范围很广,我们可以将它添加到包含 @Configuration 和 @Component 注解的类及其方法,也就是说可以延伸到继承了 @Component 注解的 @Service、@Controller、@Repository 等各种注解中。


    常见配置场景和内容

    下面来看几个常见的配置示例 , 加深对 Spring Boot 中配置体系的理解。

    对于一个 Web 应用程序而言,最常见的配置可能就是指定服务暴露的端口地址,如下所示:

    server:
    
        port: 8080
    
    

    同时,数据库访问也是 Web 应用程序的基本功能,因此,关于数据源的设置也是常见的一种配置场景,上一篇博文时给出了一个基本的示例。

    这里再以 JPA 为例,给出如下所示的一种配置方案:

    spring:
      jpa:
        hibernate:
          ddl-auto: create
        show-sql: true
    
    

    显然,这里使用了 Hibernate 作为 JPA 规范的实现框架,并设置了 show-sql 等相关属性。然后,开发人员一般也需要设置日志级别和对象,如下所示的就是一个典型的配置示例:

    logging.level.root=WARN
    logging.level.com.springcss.customer=INFO
    

    我们设置了系统的全局日志级别为 WARN,而针对自定义的 com.springcss.customer 包下的日志则将其级别调整到 INFO。

    这里需要注意的是,Spring Boot 基于 application.properties 或 application.yml 全局配置文件已经自动内置了很多默认配置。即使我们不设置上述配置内容,Spring Boot 仍然可以基于这些默认配置完成系统的初始化。

    自动配置是 Spring Boot 中的一个核心概念,我们会在后续内容中给出详细的实现原理分析。


    如何在应用程序中嵌入系统配置信息

    我们知道 Spring Boot 通过自动配置机制内置了很多默认的配置信息,而在这些配置信息中,有一部分系统配置信息也可以反过来作为配置项应用到我们的应用程序中。

    例如,如果想要获取当前应用程序的名称并作为一个配置项进行管理,那么很简单,我们直接通过 ${spring.application.name} 占位符就可以做到这一点,如下所示:

    myapplication.name : ${spring.application.name}
    

    通过 ${} 占位符同样可以引用配置文件中的其他配置项内容,如在下列配置项中,最终“system.description”配置项的值就是“The system springcss is used for health”。

    system.name=springcss
    system.domain=health
    system.description=The system ${name} is used for ${domain}.
    
    

    再来看一种场景,假设我们使用 Maven 来构建应用程序,那么可以按如下所示的配置项来动态获取与系统构建过程相关的信息:

    info: 
      app:
        encoding: @project.build.sourceEncoding@
        java:
          source: @java.version@
          target: @java.version@
    

    上述配置项的效果与如下所示的静态配置是一样的:

    info:
      app:
        encoding: UTF-8
        java:
            source: 1.8.0_31
            target: 1.8.0_31
    

    根据不同的需求,在应用程序中嵌入系统配置信息是很有用的,特别是在一些面向 DevOps 的应用场景中。


    如何创建和使用自定义配置信息

    在现实的开发过程中,面对纷繁复杂的应用场景,Spring Boot 所提供的内置配置信息并不一定能够完全满足开发的需求,这就需要开发人员创建并管理各种自定义的配置信息。

    例如,对于一个电商类应用场景,为了鼓励用户完成下单操作,我们希望每完成一个订单给就给到用户一定数量的积分。从系统扩展性上讲,这个积分应该是可以调整的,所以我们创建了一个自定义的配置项,如下所示:

    springcss.order.point = 10
    

    这里,我们设置了每个订单对应的积分为 10,那么应用程序该如何获取这个配置项的内容呢?通常有两种方法。


    使用 @Value 注解

    使用 @Value 注解来注入配置项内容是一种传统的实现方法。针对前面给出的自定义配置项,我们可以构建一个 SpringCssConfig 类,如下所示:

    @Component
    public class SpringCssConfig {
    
        @Value("${springcss.order.point}")
        private int point;
    
    }
    
    

    在 SpringCssConfig 类中,我们要做的就是在字段上添加 @Value 注解,并指向配置项的名称即可。


    使用 @ConfigurationProperties 注解

    相较 @Value 注解,更为现代的一种做法是使用 @ConfigurationProperties 注解。在使用该注解时,我们通常会设置一个“prefix”属性用来指定配置项的前缀,如下所示:

    @Component
    @ConfigurationProperties(prefix = "springcss.order")
    public class SpringCsshConfig {
    
    	private int point;
    
    	//省略 getter/setter
    
    }
    

    相比 @Value 注解只能用于指定具体某一个配置项,@ConfigurationProperties 可以用来批量提取配置内容。只要指定 prefix,我们就可以把该 prefix 下的所有配置项按照名称自动注入业务代码中。

    我们考虑一种更常见也更复杂的场景:假设用户根据下单操作获取的积分并不是固定的,而是根据每个不同类型的订单会有不同的积分,那么现在的配置项的内容,如果使用 Yaml 格式的话就应该是这样:

    springcss:
        points:
          orderType[1]: 10
          orderType[2]: 20
          orderType[3]: 30
    

    如果想把这些配置项全部加载到业务代码中,使用 @ConfigurationProperties 注解同样也很容易实现。我们可以直接在配置类 SpringCssConfig 中定义一个 Map 对象,然后通过 Key-Value 对来保存这些配置数据,如下所示:

    @Component
    @ConfigurationProperties(prefix="springcss.points")
    public class SpringCssConfig {
    
    
        private Map<String, Integer> orderType = new HashMap<>();
    
    	//省略 getter/setter
    
    }
    
    

    可以看到这里通过创建一个 HashMap 来保存这些 Key-Value 对。类似的,我们也可以实现常见的一些数据结构的自动嵌入。


    为自定义配置项添加提示功能

    如果你已经使用过 Spring Boot 中的配置文件,并添加了一些内置的配置项,你就会发现,当我们输入某一个配置项的前缀时,诸如 IDEA、Eclipse 这样的,IDE 就会自动弹出该前缀下的所有配置信息供你进行选择,效果如下:

    在这里插入图片描述
    上图的效果对于管理自定义的配置信息非常有用。如何实现这种效果呢?当我们在 application.yml 配置文件中添加一个自定义配置项时,会注意到 IDE 会出现一个提示,说明这个配置项无法被 IDE 所识别,如下所示:

    在这里插入图片描述
    遇到这种提示时,我们是可以忽略的,因为它不会影响到任何执行效果。

    但为了达到自动提示效果,我们就需要生成配置元数据。生成元数据的方法也很简单,直接通过 IDE 的“Create metadata for ‘springcss.order.point’”按钮,就可以选择创建配置元数据文件,这个文件的名称为 additional-spring-configuration-metadata.json,文件内容如下所示:

    {"properties": [{
      "name": "springcss.order.point",
      "type": "java.lang.String",
      "description": "A description for 'springcss.order.point'"
    }]}
    
    

    现在,假如我们在 application.properties 文件中输入“springcss”,IDE 就会自动提示完整的配置项内容,效果如下所示:在这里插入图片描述
    另外,假设我们需要为 springcss.order.point 配置项指定一个默认值,可以通过在元数据中添加一个"defaultValue"项来实现,如下所示:

    {"properties": [{
      "name": "springcss.order.point",
      "type": "java.lang.String",
      "description": "'springcss.order.point' is userd for setting the point when dealing with an order.",
      "defaultValue": 10
    }]}
    

    这时候,在 IDE 中设置这个配置项时,就会提出该配置项的默认值为 10,效果如下所示:在这里插入图片描述


    如何组织和整合配置信息

    Profile 可以认为是管理配置信息中的一种有效手段。

    下面,我们继续介绍另一种组织和整合配置信息的方法,这种方法同样依赖于前面介绍的 @ConfigurationProperties 注解。

    使用 @PropertySources 注解

    在使用 @ConfigurationProperties 注解时,我们可以和 @PropertySource 注解一起进行使用,从而指定从哪个具体的配置文件中获取配置信息。

    例如,在下面这个示例中,我们通过 @PropertySource 注解指定了 @ConfigurationProperties 注解中所使用的配置信息是从当前类路径下的 application.properties 配置文件中进行读取。

    @Component
    @ConfigurationProperties(prefix = "springcss.order")
    @PropertySource(value = "classpath:application.properties")
    public class SpringCssConfig {
    
    }
    

    既然我们可以通过 @PropertySource 注解来指定一个配置文件的引用地址,那么显然也可以引入多个配置文件,这时候用到的是 @PropertySources 注解,使用方式如下所示:

    @PropertySources({
            @PropertySource("classpath:application.properties "),
            @PropertySource("classpath:redis.properties"),
            @PropertySource("classpath:mq.properties")
    })
    
    public class SpringCssConfig {
    
    

    这里,我们通过 @PropertySources 注解组合了多个 @PropertySource 注解中所指定的配置文件路径。SpringCssConfig 类可以同时引用所有这些配置文件中的配置项。


    spring.config.location 来改变配置文件的默认加载位置

    另一方面,我们也可以通过配置 spring.config.location 来改变配置文件的默认加载位置,从而实现对多个配置文件的同时加载。例如,如下所示的执行脚本会在启动 customerservice-0.0.1-SNAPSHOT.jar 时加载D盘下的 application.properties 文件,以及位于当前类路径下 config 目录中的所有配置文件:

    java -jar customerservice-0.0.1-SNAPSHOT.jar --spring.config.location=file:///D:/application.properties, classpath:/config/
    

    通过 spring.config.location 指定多个配置文件路径也是组织和整合配置信息的一种有效的实现方式。


    理解配置文件的加载顺序

    通过前面的示例,我们看到可以把配置文件保存在多个路径,而这些路径在加载配置文件时具有一定的顺序。Spring Boot 在启动时会扫描以下位置的 application.properties 或者 application.yml 文件作为全局配置文件:

    –file:./config/
    
    –file:./
    
    –classpath:/config/
    
    –classpath:/
    
    

    以下是按照优先级从高到低的顺序,如下所示:

    在这里插入图片描述

    Spring Boot 会全部扫描上图中的这四个位置,扫描规则是高优先级配置内容会覆盖低优先级配置内容。而如果高优先级的配置文件中存在与低优先级配置文件不冲突的属性,则会形成一种互补配置,也就是说会整合所有不冲突的属性。


    如何覆写内置的配置类

    关于 Spring Boot 配置体系,最后值得介绍的就是如何覆写它所提供的配置类。我们已经反复强调 Spring Boot 内置了大量的自动配置,如果我们不想使用这些配置,就需要对它们进行覆写。

    覆写的方法有很多,我们可以使用配置文件、Groovy 脚本以及 Java 代码。这里,我们就以Java代码为例来简单演示覆写配置类的实现方法。

    以Spring Security为例

    在 Spring Security 体系中,设置用户认证信息所依赖的配置类是 WebSecurityConfigurer 类。顾名思义,这是一个设置 Web 安全的配置类。

    Spring Security 提供了 WebSecurityConfigurerAdapter 这个适配器类来简化该配置类的使用方式,我们可以继承 WebSecurityConfigurerAdapter 类并且覆写其中的 configure() 的方法来完成自定义的用户认证配置工作。

    典型的 WebSecurityConfigurerAdapter 子类及其代码实现如下所示

    @Configuration
    public class SpringHCssWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    
        @Override
        @Bean
        public AuthenticationManager authenticationManagerBean() throws Exception {
           return super.authenticationManagerBean();
        }
    
     
    
        @Override
        @Bean
        public UserDetailsService userDetailsServiceBean() throws Exception {
            return super.userDetailsServiceBean();
        }
    
     
    
        @Override
        protected void configure(AuthenticationManagerBuilder builder) throws Exception {
       			  builder.inMemoryAuthentication().withUser("springcss_user").password("{noop}password1").roles("USER").and()
                    .withUser("springcss_admin").password("{noop}password2").roles("USER", "ADMIN");
    
        }
    
    }
    
    

    这里我们只需要知道,在 Spring Boot 中,提供了一些类的内置配置类,而开发人员可以通过构建诸如上述所示的 SpringCssWebSecurityConfigurer 类来对这些内置配置类进行覆写,从而实现自定义的配置信息。

    展开全文
  • 针对不同环境的 profile 的配置 激活 profile 配置方式 1. 命令行激活 2. Settings 文件显示激活 3. 系统属性激活 4. 操作系统环境激活 5. 文件存在与否激活 6. 默认激活 profile种类 1)pom.xml 2)用户 ...

    目录

    前沿:

    针对不同环境的 profile 的配置

    激活 profile 配置方式

    1. 命令行激活

    2. Settings 文件显示激活

    3. 系统属性激活

    4. 操作系统环境激活

    5. 文件存在与否激活

    6. 默认激活

    profile种类

    1)pom.xml

    2)用户 settings.xml

    3)全局 settings.xml


    前沿:

    为了实现不同环境构建的不同需求,这里使用到了 profile。因为 profile 能够在构建时修改 pom 的一个子集,或者添加额外的配置元素。下面是两个场景例子

    1. 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库。此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做?

    2. 此外,你的项目需要部署。为了调试,在开发时我们在Java编译结果中加入了调试信息(Java默认)。而在部署时你希望Java编译结果中不出现调试信息。此时你又会怎么做?

    答案是Profile。Maven的Profile用于在不同的环境下应用不同的配置。一套配置即称为一个Profile。这里的“环境”可以是操作系统版本,JDK版本或某些文件是否存在这样的物理环境,也可以是你自己定义的一套逻辑环境。比如上面的A中所说的Linux和Mac OS X便是一种物理环境,而B中讲的开发环境和部署环境则为逻辑环境。Maven提供了Activation机制来激活某个Profile,它既允许自动激活(即在某些条件满足时自动使某个Profile生效),也可以手动激活。

    springboot的profile配置如果不熟悉可以参考下面的文章:

    spring boot的profile配置使用

    针对不同环境的 profile 的配置

    为了体现不同环境的不同构建,需要配置好不同环境的 profile,代码如下:

    <profiles>
        <profile>
            <id>dev_evn</id>
            <properties>
                <db.driver>com.mysql.jdbc.Driver</db.driver>
                <db.url>jdbc:mysql://localhost:3306/test</db.url>
                <db.username>root</db.username>
                <db.password>root</db.password>
            </properties>
        </profile>
        <profile>
            <id>test_evn</id>
            <properties>
                <db.driver>com.mysql.jdbc.Driver</db.driver>
                <db.url>jdbc:mysql://localhost:3306/test_db</db.url>
                <db.username>root</db.username>
                <db.password>root</db.password>
            </properties>
        </profile>
    </profiles>

    在两个不同的 profile 中,配置了同样的属性,不一样的值。按照前面的介绍,在开发时可以用 mvn 命令后面添加“-Pdev_evn”激活“dev_evn profile”。


    激活 profile 配置方式

    在 Maven 中,可以选用如下的方式激活 profile。

    1. 命令行激活

    用户可以在 mvn 命令行中添加参数“-P”,指定要激活的 profile 的 id。如果一次要激活多个 profile,可以用逗号分开一起激活。例如:

    mvn clean install -Pdev_env,test_evn

    这个命令就同时激活了 id 为“dev_evn”和“test_evn”的两个 profile。

    2. Settings 文件显示激活

    如果希望某个 profile 默认一直处于激活状态,可以在 settings.xml 中配置 activeProfiles 元素,指定某个 profile 为默认激活状态,样例配置代码如下:

    <settings>
        ...
        <activeProfiles>
            <activeProfile>dev_evn</activeProfile>
        </activeProfiles>
        ...
    </settings>

    3. 系统属性激活

    可以配置当某个系统属性存在时激活 profile,代码如下:

    <profiles>
        <profile>
            ...
            <activation>
                <property>
                    <name>profileProperty</name>
                </property>
            </activation>
        </profile>
    </profiles>

    甚至还可以进一步配置某个属性的值是什么时候激活,例如:

    <profiles>
        <profile>
            ...
            <activation>
                <property>
                    <name>profileProperty</name>
                    <value>dev</value>
                </property>
            </activation>
        </profile>
    </profiles>

    这样就可以在 mvn 中用“-D”参数来指定激活,例如:

    Mvn clean install -DprofileProperty=dev

    表示激活属性名称为 profileProperty,值为 dev 的 profile。

    实际上这也是一种命令激活 profile 的方法,只是用的是“-D”参数指定激活的属性和值,而前面的是用的“-P”参数指定激活的 profile 的 id 而已。

    4. 操作系统环境激活

    用户可以通过配置指定不同操作系统的信息,实现不同操作系统做不同的构建。例如:

    <profiles>
        <profile>
            <activation>
                <os>
                    <name>Window XP</name>
                    <family>Windows</family>
                    <arch>x86</arch>
                    <version>5.1.2600</version>
                </os>
            </activation>
        </profile>
    </profiles>

    family 的值是 Windows、UNIX 或 Mac。name 为操作系统名称。arch为操作系统的架构。version为操作系统的版本。具体的值可以通过查看环境中的系统属性“os.name”“os.arch”和“os.version”获取。

    5. 文件存在与否激活

    当然,也可以通过配置判断某个文件存在与否来决定是否激活 profile,样例配置代码如下:

    <profiles>
        <profile>
            <activation>
                <file>
                    <missing>t1.properties</missing>
                    <exists>t2.properties</exists>
                </file>
            </activation>
        </profile>
    </profiles>

    6. 默认激活

    最后,还可以配置一个默认的激活 profile,例如:

    <profiles>
        <profile>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

    需要注意的是,如果 pom 中有任何一个 profile 通过其他方式被激活的话,所有配置成默认激活的 profile 都会自动失效。 可以使用如下命令查看当前激活的 profile。

    Mvn help:active-profiles

    也可以使用如下命令查看所有的 profile。

    Mvn help:all-profiles

    idea中可以通过点击按钮实现不童环境的切换(开始进入工作的时候,没有使用过maven的profile)感到非常的陌生,什么都不知道啊。。。。。

     点钩,这些环境是互斥的,想要什么环境只要选中即可。


    profile种类

    前面介绍了 profile 的意义和激活方式。那么在 Maven 中,有哪些 profile?如何配置呢?

    根据 profile 配置的位置不同,可以将 profile 分成如下几种。

    1)pom.xml

    pom.xml 中声明的 profile 只对当前项目有效。

    2)用户 settings.xml

    在用户目录下的“.m2/settings.xml”中的 profile,对本机上的该用户的所有 Maven 项目有效。

    3)全局 settings.xml

    在 Maven 安装目录下 conf/settings.xml 中配置的 profile,对本机上所有项目都有效。

    为了不影响其他用户且方便升级 Maven,一般配置自己的 settings.xml,不要轻易修改全局的 settings.xml。同样的道理,一般不需要修改全局 settings.xml 中的 profile。

    不同类型的 profile 中可以声明的 pom 元素是不一样的,pom.xml 中的 profile 能够随同 pom.xml 一起提交到代码仓库中,被 Maven 安装到本地仓库里面,并且能被部署到远程 Maven 仓库中。也就是说,可以保证 profile 伴随特定的 pom.xml 一起存在。所以它可以修改或者添加很多 pom 元素,例如:

    <project>
        <repositories></repositories>
        <pluginRepositories></pluginRepositories>
        <dependencies></dependencies>
        <dependencyManagement></dependencyManagement>
        <modules></modules>
        <properties></properties>
        <reporting></reporting>
        <build>
            <plugins></plugins>
            <defaultGoal></defaultGoal>
            <resources></resources>
            <testResources></testResources>
            <finalName></finalName>
        </build>
    </project>

    如上代码所示,在 pom 中的 profile 元素比较多,可以添加或修改插件配置、项目资源目录、测试资源目录配置和项目构建的默认名称等。

    除了 pom 中的 profile 外,其他外部的 profile 可以配置的元素相对就少些,因为那些外部 profile 无法保证同项目中的 pom.xml 一起发布。

    如果在外部 profile 中配置了项目依赖,开发用户可以在本地编译,但是因为依赖配置没有随同 pom.xml 一起发布部署到仓库中,别的用户下载了该项目后,就会因为缺少依赖而失败。

    为了避免这样的不一致情况,很多在 pom 的 profile 可以出现的元素不允许在外部 profile 中出现。

    在外部 profile 可以声明的元素如下:

    <project>
        <repositories></repositories>
        <pluginRepositories></pluginRepositories>
        <properties></properties>
    </project>

    这些外部 profile 元素不足以影响项目的正常构建,只会影响项目的仓库和 Maven 属性。

    参考博客:

    http://c.biancheng.net/view/5286.html

    展开全文
  • spring Profile

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

    千次阅读 2020-07-02 01:32:18
    golang中提供了多种profile用于分析golang程序的CPU、内存等使用情况。heap profile是堆内存使用情况的profile信息,用于分析程序当前的堆内存使用情况,在分析内存开销和内存泄露问题时是一种有效的分析工具。 ...
  • Freeswitch profile 配置

    千次阅读 2019-08-26 10:40:01
    freeswitch> sofia profile <profile_name> flush_inbound_reg [|] [reboot] If you leave out <call_id> and/or , you will flush/reboot every registered endpoint on a profile. Reloading profiles ...
  • Load Profile

    千次阅读 2021-07-18 17:44:52
    Oracle常见Load Profile
  • Invalid Provisioning Profile

    千次阅读 2022-04-14 10:41:48
    iOS打包archive时出现如下提示错误: ERROR ITMS-90161: "Invalid Provisioning Profile. The provisioning profile included in the bundle com.smartiot-china.jnappv2 [Payload/HBuilder.app] is invalid. ...
  • Android Work Profile

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

    千次阅读 2018-12-26 18:30:47
    1、查询profile 2、更改session连接属性 用户Profile详解 一、Profile目的: 二、条件: 三、查看系统的默认PROFILE 四、创建 profile 的语法如下: 五、部分解释: 六、尝试创建一个混合型的PROFILE(包含...
  • 完整的蓝牙应用协议。。包括各种版本的应用协议, 如a2dp的1.0、1.1和1.2版本等。 所需的就是有用的,希望给大家用上~!我们的祖国是花园~! 蓝牙应用在4.0之前为标准蓝牙,4.0之后为BLE(低功耗蓝牙)。...
  • 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_...
  • 一、什么是Profile Owner 因为Profile Owner在体验上与Device Owner和Device admin有很大的差别,所以额外添加了一段讲解什么是Profile Owner。 google为了Android在企业中运用推出的安全方案,即android for work,...
  • work profile关闭时桌面图标变灰

    千次阅读 2022-03-10 18:34:48
    work profile关闭时桌面图标变灰
  • Spring Boot配置 profile

    千次阅读 2022-01-20 16:09:57
    Spring Boot配置与激活 Profile
  • 对于蓝牙Profile的理解

    千次阅读 2019-06-26 17:19:09
    什么是Profile? 众所周知,蓝牙中有很多的profile,我们接触和学习蓝牙相关的开发不可避免的需要弄懂什么是Profile ,但它对于新手而言似乎没那么容易弄懂,即使是有经验者也很难形象的描述profile的含义,这里我...
  • Pycharm图形化性能测试工具Profile

    千次阅读 2021-06-21 16:03:12
    在部署模型的时候遇到一个需要加速的问题,为了搞清楚模型调用过程中最耗时的操作以定位优化,同事告诉了我一个调优的工具,叫profile。 主要参考:Python的7种性能测试工具:timeit、profile、cProfile、line_...
  • 0、前言 项目环境部署是自己的薄弱项,一些简单的服务,照着搜索来的步骤能凑合部署成功,...要配置环境变量,就要用到什么bashrc或bash_profile文件,可是这文件有啥区别,一直不明白,今天看到这篇文章,结合自己...
  • 设置用户环境变量 输入命令:vim ~/.bash_profile,打开文件,输入如下内容: 范例(设置maven环境变量): export M2_HOME=~/apache-maven-3.5.2 export PATH=$PATH:$M2_HOME/bin 退出并保存:esc =&...
  • [醉了]解决重启mac但是bash_profile不生效的彻底解决方法
  • 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可以定义随空间坐标...
  • 4、Spring profile与Maven Profile 融合二者,取长补短 实现多环境打包 5、成果展现 6、总结 7、参考文章 1、使用场景 因为实际项目之中,经常使用到针对不同环境进行相关的打包。于是趁最近一段时间比较闲。...
  • Profile多环境下Profile 在实际项目发布流程中,往往会涉及到多个环境下各类配置的切换。在Spring Boot中提供了多种机制允许开发者进行自行的定制和设置。 profile是用来描述某个环境下的配置信息的总称,包括:...
  • 最近安装了 Neovim,并且在 .bash_profile 中设置好了 PATH 变量,奇怪的是,每次在 SSH 客户端新打开一个新的 session,登录服务器进入自己账号以后,位于.bash_profile 中的 PATH 设置命令没有生效,导致我无法...
  • macOS中base_profile和zshrc文件配置问题

    千次阅读 2022-03-19 21:15:07
    最近新买了MacBook Pro笔记本,系统是Monterey,因为开发工作的缘故,需要配置一下环境变量,但是因为从window系统切换过来的,一些配置操作并不熟悉,搜索了一些网上资料博客等,大部分都是说在bash_profile中进行...
  • MacBook 编辑 .bash_profile 文件

    千次阅读 2022-01-24 14:04:43
    2.如果没有.bash_profile文件,要创建这个文件 1.进入当前用户的home目录 终端输入:cd ~ 或 cd /Users/YourMacUserName 2.终端输入:touch .bash_profile 有的话,如果.bash_profile文件不为锁定状态 1.终端...
  • 亲们,我们又来到了课课家文章的学习,快乐是无处不在的 而分享快乐不仅仅是让自己快乐 也让周围的人都...在Linux系统中etc/profile文件一般是不能更改的,想要更改etc/profile文件就要用一些特殊的技巧进行Linux文...
  • Linux 下恢复profile 文件方法

    千次阅读 2022-04-05 15:11:46
    在配置环境变量时,修改profile 文件导致ls 等系统命令不能用 不要慌,用下面方法可以修复 命令行 输入; export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 然后再运行 source /etc/profile 好了,再试试...
  • 解决Linux环境变量每次要source /etc/profile问题1、方法一2、方法二(自测有效) 1、方法一 把export语句写在 ~/.bashrc 文件里,或者在该文件里写上 source /etc/profile 指令:vim ~/.bashrc 或者 vi ~/.bashrc ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 843,995
精华内容 337,598
关键字:

profile