wildfly 21的配置檔案和資源管理

flydean發表於2020-12-31

簡介

在上一篇文章我們介紹了wildfly 21的基本使用和管理介面。今天我們將會詳細講解一下wildfly的配置檔案和資源管理。

wildfly的配置檔案

不管是在standalone還是在domain模式下,有兩個配置檔案是非常重要的,他們是standalone.xml和domain.xml。

其他的standalone-*.xml可以參考standalone.xml來配置

我們看下standalone.xml的大體結構:

<server xmlns="urn:jboss:domain:14.0">
<extensions>
...
</extensions>
<management>
...
</management>
<profile>
...
</profile>
<interfaces>
    ...
</interfaces>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    ...
</socket-binding-group>
</server>

server主要有5部分,分別是extensions,management,profile,interfaces和socket-binding-group。

extensions

extensions表示的是核心應用程式之外的module。因為有了這些外部的module,所以wildfly核心應用程式是非常簡單和輕量級的。

這些外部的module是放在modules資料夾的。我們可以通過使用extension標籤來引用他們:

<extensions>
    [...]
    <extension module="org.jboss.as.transactions"/>
    <extension module="org.jboss.as.webservices" />
    <extension module="org.jboss.as.weld" />
    [...]
    <extension module="org.wildfly.extension.undertow"/>
</extensions>

profile

profile是由多個subsystem組成的。subsystem是通過extension新增到核心伺服器的一組新增的功能。

我們看一個profile和subsystem的例子:

<profile>
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
            <console-handler name="CONSOLE">
                <level name="INFO"/>
                <formatter>
                    <named-formatter name="COLOR-PATTERN"/>
                </formatter>
            </console-handler>
            <periodic-rotating-file-handler name="FILE" autoflush="true">
                <formatter>
                    <named-formatter name="PATTERN"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="server.log"/>
                <suffix value=".yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>
            <logger category="com.arjuna">
                <level name="WARN"/>
            </logger>
            <logger category="io.jaegertracing.Configuration">
                <level name="WARN"/>
            </logger>
            <logger category="org.jboss.as.config">
                <level name="DEBUG"/>
            </logger>
            <logger category="sun.rmi">
                <level name="WARN"/>
            </logger>
            <root-logger>
                <level name="INFO"/>
                <handlers>
                    <handler name="CONSOLE"/>
                    <handler name="FILE"/>
                </handlers>
            </root-logger>
            <formatter name="PATTERN">
                <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
            </formatter>
            <formatter name="COLOR-PATTERN">
                <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
            </formatter>
        </subsystem>
</profile>

上面的程式碼配置了一個jboss:domain:logging,設定了日誌的格式,日誌級別等資訊。

基本上domain.xml和standalone.xml中的profile的內容是一樣的,不同的是domain.xml中可以配置多個profile,而standalone.xml只能有一個profile。

path

在上面的日誌配置中,我們在periodic-rotating-file-handler 中使用了 file的path屬性。需要在path屬性中指定日誌檔案的位置。

<file relative-to="jboss.server.log.dir" path="server.log"/>

這裡我們使用的是server.log,實際上wildfly中有很多內建的path變數:

  • jboss.home.dir - WildFly的root目錄

  • user.home - 使用者的home目錄

  • user.dir - 使用者的當前工作目錄

  • java.home - java安裝目錄

  • jboss.server.base.dir - server例項的root目錄

  • jboss.server.config.dir - server例項的配置檔案目錄

  • jboss.server.data.dir - server例項的資料目錄

  • jboss.server.log.dir - server例項的日誌目錄

  • jboss.server.temp.dir - server例項的temp目錄

  • jboss.controller.temp.dir - controller例項的temp目錄

  • jboss.domain.servers.dir - 在managed domain模式下,host controller為servers建立的工作目錄

除了最上面的5個路徑之外,使用者可以自定義或者重寫其他的內建路徑:

<path name="example" path="example" relative-to="jboss.server.data.dir"/>

其中name表示的是path的名字,path是路徑的值,如果沒有relative-to就是絕對路徑,帶上relative-to就是相對路徑。

relative-to表示的是相對路徑的基準。

上面的格式只能在standalone.xml檔案中使用。如果要在domain.xml中使用則必須下面的格式:

<path name="x"/>

這裡的name只是對host.xml檔案中的path定義的一個引用:

<path name="x" path="/var/x" />

interface

iterface表示的是網路介面,可以是hostname也可以是IP地址,是給後面的sockets繫結使用的。

我們看一個interface的例子:

    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

同樣的,如果是在domain.xml中的interface標籤只能包含name屬性:

<interface name="internal"/>

這個引用是定義在host.xml中的。

socket-binding

socket-binding定義的是網路的出口,通過指定繫結的ip和介面,最終可通過該地址來訪問相應的服務:

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
        </outbound-socket-binding>
    </socket-binding-group>

上面的例子中,我們定義了ajp,http,https的地址,並且還有幾個管理端,事務,郵件的地址。

注意,我們有一個屬性叫做port-offset,這個可以設定標準介面的偏移量,特別方便在標準介面被佔用的情況下使用。

比如,我們預設的http埠是8080,如果這個埠已經被佔用了,那麼我們可以傳入一個port-offset= 100,這樣http埠就變成了8180,非常方便。

management

management是對wildfly管理端的配置,我們知道可以通過wildfly的web端或者cli端進行wildfly的管理。

我們看下management的定義:

    <management>
        <security-realms>
            <security-realm name="ManagementRealm">
                <authentication>
                    <local default-user="$local" skip-group-loading="true"/>
                    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
                </authentication>
                <authorization map-groups-to-roles="false">
                    <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
                </authorization>
            </security-realm>
        </security-realms>
        <audit-log>
            <formatters>
                <json-formatter name="json-formatter"/>
            </formatters>
            <handlers>
                <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
            </handlers>
            <logger log-boot="true" log-read-only="false" enabled="false">
                <handlers>
                    <handler name="file"/>
                </handlers>
            </logger>
        </audit-log>
        <management-interfaces>
            <http-interface security-realm="ManagementRealm">
                <http-upgrade enabled="true"/>
                <socket-binding http="management-http"/>
            </http-interface>
        </management-interfaces>
        <access-control provider="simple">
            <role-mapping>
                <role name="SuperUser">
                    <include>
                        <user name="$local"/>
                    </include>
                </role>
            </role-mapping>
        </access-control>
    </management>

上面的例子中,我們通過management-interfaces指定了管理端的訪問地址,和要使用到的安全策略。

在security-realms中,我們可以定義多種security-realm。在security-realm中可以定義使用者資訊和group資訊。

資源管理

wildfly提供了兩種資源管理的方式,一種就是通過web端http://host:9990/console ,一種就是通過命令列:

./bin/jboss-cli.sh
You are disconnected at the moment. Type 'connect' to connect to the server
or 'help' for the list of supported commands.
[disconnected /]
 
[disconnected /] connect
[standalone@localhost:9990 /]

web端大家應該都很清楚怎麼使用,這裡重點介紹一下命令列端的使用情況。

我們通過help --commands可以拿到命令列狀態下可以執行的命令:

attachment                              deployment enable-all                   module                                  security enable-http-auth-http-server
batch                                   deployment info                         patch apply                             security enable-http-auth-management
cd                                      deployment list                         patch history                           security enable-sasl-management
clear                                   deployment undeploy                     patch info                              security enable-ssl-http-server
command                                 deployment undeploy-cli-archive         patch inspect                           security enable-ssl-management
command-timeout                         deployment-info                         pwd                                     security reorder-sasl-management
connect                                 deployment-overlay                      quit                                    set
connection-info                         echo                                    read-attribute                          shutdown
data-source                             echo-dmr                                read-operation                          try
deploy                                  for                                     reload                                  undeploy
deployment deploy-cli-archive           grep                                    run-batch                               unset
deployment deploy-file                  help                                    security disable-http-auth-http-server  version
deployment deploy-url                   history                                 security disable-http-auth-management   xa-data-source
deployment disable                      if                                      security disable-sasl-management
deployment disable-all                  jdbc-driver-info                        security disable-ssl-http-server
deployment enable                       ls                                      security disable-ssl-management

除此之外,命令列還對資源提供了一系列的操作符來對資源進行操作。

在wildfly中,可管理的物件都被看做是一個一個的資源,我們可以通過資源的路徑來訪問到這個資源。

比如,我想看一下server下面名字是default-server的資源,則可以這樣:

 /server=default-server 

資源路徑可以連寫,比如:

/subsystem=undertow/server=default-server/http-listener=default

這些都是有效的資源路徑。

有了資源路徑,我們還需要提供操作符來對資源進行操作,wildfly提供了下面的操作符:

add

read-attribute

read-children-names

read-children-resources

read-children-types

read-operation-description

read-operation-names

read-resource

read-resource-description

remove

validate-address

write-attribute

我們可以在操作符前面加上冒號,來具體使用他們:

/subsystem=logging:read-operation-names

上面的例子將會獲取對logging子系統的操作符:

{
    "outcome" => "success",
    "result" => [
        "add",
        "list-add",
        "list-clear",
        "list-get",
        "list-log-files",
        "list-remove",
        "map-clear",
        "map-get",
        "map-put",
        "map-remove",
        "query",
        "read-attribute",
        "read-attribute-group",
        "read-attribute-group-names",
        "read-children-names",
        "read-children-resources",
        "read-children-types",
        "read-log-file",
        "read-operation-description",
        "read-operation-names",
        "read-resource",
        "read-resource-description",
        "remove",
        "undefine-attribute",
        "whoami",
        "write-attribute"
    ]
}

總結

本文講解了wildfly的配置檔案和資源管理相關的操作,希望大家能夠喜歡。

本文作者:flydean程式那些事

本文連結:http://www.flydean.com/wildfly-config-resource/

本文來源:flydean的部落格

歡迎關注我的公眾號:「程式那些事」最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

相關文章