jhipster框架学习(三)

来源:互联网 发布:阿里云备案拍照要求 编辑:程序博客网 时间:2024/05/23 11:13

JHipster配置文件介绍

jhipster生成的微服务项目通常有多个配置文件,比如:application-dev.yml,application-prod.yml,application.yml,bootstrap.yml,bootstrap-prod.yml。那么一个项目中有这么多配置文件,在启动的时候到底是如何加载配置信息的呢?下面我们来一点点的分析。

    首先,很明显的名称后面带有dev字母的表示存储开发环境的配置信息,名称后面带有prod字母的表示存储生产环境的配置信息。通过简单的分类之后,接下来我们只需要分析其中一类就好了,这里我们以含有dev名称的配置文件为例进行分析。

bootstrap.yml文件

    bootstrap.yml指的是开发环境的配置文件,bootstrap-prod.yml则指的是生产环境的配置文件。那bootstrap.yml文件是什么呢?我们先来看一下这个文件的介绍:

要说bootstrap文件,先要从spring cloud说起,毕竟JHipster这个开发平台只是把spring cloud整合到自己的平台上。在spring cloud中有一个“引导上下文”的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application.*(yml或properties)中的属性不同,引导上下文加载bootstrap.*中的属性。配置在bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置文件覆盖。如需禁用引导过程,可设置spring.cloud.bootstrap.enabled=false。

总之,在JHipster中项目启动时总是先加载bootstrap.yml文件,然后再加载其他的配置文件,并且该文件的内容不会被覆盖。那么我们来看看bootstrap文件中的内容吧:

1.user微服务的bootstrap.yml文件

# ===================================================================# Spring Cloud Config bootstrap configuration for the "dev" profile# In prod profile, properties will be overwriten by the ones defined in bootstrap-prod.yml# ===================================================================jhipster:    registry:        password: admin   #user微服务注册到registry服务中心的密码是adminspring:                   #user微服务的项目名称    application:        name: user    profiles:            #user微服务启动时指定加载dev配置文件还是prod配置文件,这里我们不指定        # The commented value for `active` can be replaced with valid Spring profiles to load.        # Otherwise, it will be filled in by maven when building the WAR file        # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`        active: #spring.profiles.active#    cloud:               #这段配置是指将user微服务的配置文件交给注册中心registry里面的config servier管理        config:          #user微服务首先去registy中的config目录下加载自己的配置文件(文件名是name-profile.yml,即user-dev.yml)                         #如果registry中获取配置文件的方式是从git上获取,那么这里的label:master就是指定user微服务获取哪个分支上的配置文件                         fail-fast: true   #JHipster整合了Netflix的Hystrix(一个实现了超时机制和断路器模式的工具类库),这里是指是否开启快速失败机制,通常选择true            uri: http://admin:${jhipster.registry.password}@localhost:8761/config            # name of the config server's property source (file.yml) that we want to use            name: user            profile: dev # profile(s) of the property source            label: master # toggle to switch to a different version of the configuration as stored in git            # it can be set to any label, branch or commit of the config source git repositoryinfo:                  #自行设置user微服务的版本,此处未设置    project:        version: #project.version#
2.注册中心registry的bootstray.yml配置文件

# ===================================================================# Spring Cloud Config bootstrap configuration for the "dev" profile# In prod profile, properties will be overwriten by the ones defined in bootstrap-prod.yml# ===================================================================spring:                              #注册中心的应用名称    application:        name: jhipster-registry    profiles:                       #此处是指加载配置文件方式:dev类型的文件,native本地加载,(git远程加载)        active: dev,native    cloud:          #这里是对registry中的spring cloud config进行配置,如果active包含native则所有项目的配置文件都只从本地加载,        config:     #如果active包含git则所有配置文件都从git仓库中加载,uri指定了git仓库的地址,prefix是指搜索配置文件在git仓库中的                           server: #路径,由于我把配置文件都放在git仓库的config文件夹下,所以需要这样配置                 git: #剩下的配置属性和user微服务的属性雷同,就不再一一介绍了。                    uri: https://git.oschina.net/liupengf/profiles                native:                    search-locations: file:./central-config                prefix: /config                bootstrap: true            fail-fast: true            # name of the config server's property source (file.yml) that we want to use            name: jhipster-registry            profile: dev # profile(s) of the property source            label: master # toggle to switch to a different version of the configuration as stored in git            # it can be set to any label, branch or commit of the config source git repositoryinfo:    project:        version: #project.version## uncomment to enable encryption featuresencrypt:    #这个属性是配置加解密的key,由于配置文件中有些敏感信息如数据库密码等不方便放在git仓库中,所以需要加解密。    key: my-secret-encryption-key-to-change-in-production
到这里为止,有关bootstrap.yml中的相关属性都介绍完了,其中红色的注解是我对配置属性的理解。

对于微服务user来说,在项目启动时加载完之后会去加载哪个配置文件呢?

这里要分两种情况,如果registry注册中心bootstrap配置文件中spring.profile.active:指定native,则user微服务就会加载本地的配置文件,如果指定的是git,则会去git仓库中加载user-dev|prod.yml。

假定是从本地加载配置文件,我们先来看一下user微服务的application.yml配置文件:

# ===================================================================# Spring Boot configuration.## This configuration will be overriden by the Spring profile you use,# for example application-dev.yml if you use the "dev" profile.## More information on profiles: https://jhipster.github.io/profiles/# More information on configuration properties: https://jhipster.github.io/common-application-properties/# ===================================================================# ===================================================================# Standard Spring Boot properties.# Full reference is available at:# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html# ===================================================================eureka:    client:        enabled: true        healthcheck:            enabled: true        fetch-registry: true        register-with-eureka: true        instance-info-replication-interval-seconds: 10        registry-fetch-interval-seconds: 10    instance:        appname: user        instanceId: user:${spring.application.instance-id:${random.value}}        lease-renewal-interval-in-seconds: 5        lease-expiration-duration-in-seconds: 10        status-page-url-path: ${management.context-path}/info        health-check-url-path: ${management.context-path}/health        metadata-map:            profile: ${spring.profiles.active}            version: ${info.project.version}ribbon:    eureka:        enabled: true# See https://github.com/Netflix/Hystrix/wiki/Configuration#hystrix:#    command:#        default:#            execution:#                isolation:#                    thread:#                        timeoutInMilliseconds: 10000management:    security:        roles: ADMIN    context-path: /management    health:        mail:            enabled: false # When using the MailService, configure an SMTP server and set this to truespring:    application:        name: user    jackson:        serialization.write_dates_as_timestamps: false    jpa:        open-in-view: false        hibernate:            ddl-auto: none            naming:                physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy                implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy    messages:        basename: i18n/messages    mvc:        favicon:            enabled: false    thymeleaf:        mode: XHTMLsecurity:    basic:        enabled: falseserver:    session:        cookie:            http-only: true# ===================================================================# JHipster specific properties## Full reference is available at: https://jhipster.github.io/common-application-properties/# ===================================================================jhipster:    async:        core-pool-size: 2        max-pool-size: 50        queue-capacity: 10000    # By default CORS is disabled. Uncomment to enable.    #cors:        #allowed-origins: "*"        #allowed-methods: GET, PUT, POST, DELETE, OPTIONS        #allowed-headers: "*"        #exposed-headers:        #allow-credentials: true        #max-age: 1800    mail:        from: user@localhost    swagger:        default-include-pattern: /api/.*        title: user API        description: user API documentation        version: 0.0.1        terms-of-service-url:        contact-name:        contact-url:        contact-email:        license:        license-url:    ribbon:        display-on-active-profiles: dev# ===================================================================# Application specific properties# Add your own application properties here, see the ApplicationProperties class# to have type-safe configuration, like in the JHipsterProperties above## More documentation is available at:# https://jhipster.github.io/common-application-properties/# ===================================================================application:
关于application.yml这个配置文件里面的属性我并不是完全都了解,所以我就在这里统一总结一下:这个配置文件中通常会放一些公共的配置信息,一般情况下不需要修改,比如eureka设置的相关信息、ribbon配置以及Restful风格的相关设置。但是这个配置文件中的信息会被application-dev|prod.yml中的内容所替换,所以需要修改的配置我们通常定义在application-dev|prod.yml中。

下面来看一下user微服务的application-dev.yml的配置信息:

# ===================================================================# Spring Boot configuration for the "dev" profile.## This configuration overrides the application.yml file.## More information on profiles: https://jhipster.github.io/profiles/# More information on configuration properties: https://jhipster.github.io/common-application-properties/# ===================================================================# ===================================================================# Standard Spring Boot properties.# Full reference is available at:# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html# ===================================================================eureka:    #eureka的相关设置,设置注册到eureka的默认地址上http://admin:${jhipster.registry.password}@localhost:8761/eureka/    instance:        prefer-ip-address: true  #指定微服务在服务中心的instansId        instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}:${random.value}    client:        service-url:            defaultZone: http://admin:${jhipster.registry.password}@localhost:8761/eureka/spring:      #指定启动的配置文件类型    profiles:        active: dev        include: no-liquibase,swagger    devtools:        restart:            enabled: true        livereload:            enabled: false # we use gulp + BrowserSync for livereload    jackson:        serialization.indent_output: true    datasource:  #配置数据库相关的信息        type: com.zaxxer.hikari.HikariDataSource        url: jdbc:mysql://127.0.0.1:3306/jhipster?useUnicode=true&characterEncoding=utf8&characterResultSets=utf8        username: root        password: root        hikari:            data-source-properties:                cachePrepStmts: true                prepStmtCacheSize: 250                prepStmtCacheSqlLimit: 2048                useServerPrepStmts: true    jpa:        database-platform: org.hibernate.dialect.MySQL5InnoDBDialect        database: MYSQL        show-sql: true        generate-ddl: true        properties:            hibernate.id.new_generator_mappings: true            hibernate.cache.use_second_level_cache: true            hibernate.cache.use_query_cache: false            hibernate.generate_statistics: true            hibernate.cache.region.factory_class: com.hazelcast.hibernate.HazelcastCacheRegionFactory            hibernate.cache.hazelcast.instance_name: user            hibernate.cache.use_minimal_puts: true            hibernate.cache.hazelcast.use_lite_member: true    mail:        host: localhost        port: 25        username:        password:    messages:        cache-seconds: 1    thymeleaf:        cache: false    zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies        base-url: http://localhost:9411        enabled: false        locator:            discovery:                enabled: trueliquibase:    contexts: dev# ===================================================================# To enable SSL, generate a certificate using:# keytool -genkey -alias user -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650## You can also use Let's Encrypt:# https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm## Then, modify the server.ssl properties so your "server" configuration looks like:## server:#    port: 8443#    ssl:#        key-store: keystore.p12#        key-store-password: <your-password>#        keyStoreType: PKCS12#        keyAlias: user# ===================================================================server:  #设置端口号    port: 8081# ===================================================================# JHipster specific properties## Full reference is available at: https://jhipster.github.io/common-application-properties/# ===================================================================jhipster:    http:        version: V_1_1 # To use HTTP/2 you will need SSL support (see above the "server.ssl" configuration)    cache: # Cache configuration        hazelcast: # Hazelcast distributed cache            time-to-live-seconds: 3600            backup-count: 1    # CORS is only enabled by default with the "dev" profile, so BrowserSync can access the API    cors:        allowed-origins: "*"        allowed-methods: GET, PUT, POST, DELETE, OPTIONS        allowed-headers: "*"        exposed-headers:        allow-credentials: true        max-age: 1800    security:        authentication:            jwt:                secret: my-secret-token-to-change-in-production                # Token is valid 24 hours                token-validity-in-seconds: 86400                token-validity-in-seconds-for-remember-me: 2592000    mail: # specific JHipster mail property, for standard properties see MailProperties        from: user@localhost        base-url: http://127.0.0.1:8081    metrics: # DropWizard Metrics configuration, used by MetricsConfiguration        jmx.enabled: true        graphite: # Use the "graphite" Maven profile to have the Graphite dependencies            enabled: false            host: localhost            port: 2003            prefix: user        prometheus: # Use the "prometheus" Maven profile to have the Prometheus dependencies            enabled: false            endpoint: /prometheusMetrics        logs: # Reports Dropwizard metrics in the logs            enabled: false            report-frequency: 60 # in seconds    logging:        logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration            enabled: false            host: localhost            port: 5000            queue-size: 512        spectator-metrics: # Reports Spectator Circuit Breaker metrics in the logs            enabled: false            # edit spring.metrics.export.delay-millis to set report frequency# ===================================================================# Application specific properties# Add your own application properties here, see the ApplicationProperties class# to have type-safe configuration, like in the JHipsterProperties above## More documentation is available at:# https://jhipster.github.io/common-application-properties/# ===================================================================application:
可以看到,application-dev.yml中的配置信息我也只是挑了一些简单的部分注释了一下,这个文件中有些内容和appliaction.yml中是重合的,不过并无大碍。
目前我对JHipster的配置文件的了解就只有这么多了,如果以后还有更多的了解再继续更新,今天就到这里吧。


原创粉丝点击