月度归档: 2018年2月

Confluence创建自定义宏

因为文档编辑需要,自己学着创建了一个Confluence自定义宏,大体情况是这样的,编写api文档的时候总要编辑url的地址,但是考虑到后期如果有服务器域名变更等的问题,可能就需要把所有文档里的接口地址都修改一遍,这样的操作想想都头皮发麻,于是想到了用宏来管理api的url链接。

首先我们分析下,url分为3个部分,域名(ip),端口,接口路径,所以我们需要的这个宏有对应的三个参数,其中域名部分因为不会变更,或者说需要变更的时候都要统一变更,所以这个部分可以做成一个selector。在简单的研习过Confluence的宏编写文档之后,于是写出了这个宏,代码如下

## Macro title: My Macro
## Macro has a body: Y or N
## Body processing: Selected body processing option
## Output: Selected output option
##
## Developed by: CheungQ
## Date created: dd/mm/yyyy
## Installed by: CheungQ

## This is an example macro
## @param Host:title=域名|type=enum|enumValues=www.mydomain.com|required=true|desc=域名
## @param Port:title=端口|type=string|required=true|desc=端口号|default=80
## @param Name:title=API|type=string|required=true|desc=API路径,不用带斜杠

<a target="_blank" href="http://$paramHost:$paramPort/$paramName">http://$paramHost:$paramPort/$paramName</a>

 

接下来还是看这个宏的效果吧

 

另外付下官方文档中的相关参数说明

 

The sections below describe each of the attributes in detail.

Attribute name

Description

Required / Recommended / Optional

(an unnamed, first attribute) A unique name for the parameter. The parameter name is the first attribute in the list. The name attribute itself does not have a name. See the section on name below. Required
multiple Specifies whether the parameter accepts multiple values. Defaults to false. Optional
required Specifies whether the user must enter information for this parameter. Defaults to false. Optional
default The default value for the parameter. Optional
type The field type for the parameter. See the section on type below. Recommended
desc The parameter description will appear in the macro browser. Optional
title The parameter title will appear in the macro browser. If you do not specify a title, Confluence will use the parameter name. Recommended

 

 

Parameter type

The field type for the parameter. If you do not specify a type, the default is string.

Parameter type

Description

boolean Displays a checkbox to the user and passes the value ‘true’ or ‘false’ to the macro as a string.
enum Offers a list of values for selection. You can specify the values to appear in a dropdown in the macro browser. Example of specifying the enum values:

## @param colour:title=Colour|type=enum|enumValues=Grey,Red,Yellow,Green

Note about i18n: Confluence does not support internationalisation of the enum values.The value the user sees is the one passed to the macro as the parameter value, with the capitalisation given. In this case ‘Grey’, ‘Red’, etc.

string A text field. This is the default type. Example with a required field:

## @param status:title=Status|type=string|required=true|desc=Status to display
confluence-content Offers a control allowing the user to search for a page or blog post. Example:

## @param page:title=Page|type=confluence-content|required=true|desc=Select a page do use
username Search for user.

## @param user:title=Username|type=username|desc=Select username to display
spacekey Offers a list of spaces for selection. Passes the space key to the macro. Example:

## @param space:title=Space|type=spacekey
date Confluence accepts this type, but currently treats it in the same way as ‘string’. Example:

## @param fromDate:title=From Date|type=date|desc=Date to start from. Format: dd/mm/YYYY 

Note about dates: A user can enter a date in any format, you should validate the date format in your user macro.

int Confluence accepts this type, but treats it in the same way as ‘string’. Example with a default value:

## @param numPosts:title=Number of Posts|type=int|default=15|desc=Number of posts to display
percentage Confluence accepts this type, but treats it in the same way as ‘string’. Example:

## @param pcent:title=Percentage|type=percentage|desc=Number of posts to display 

SpringCloud配置ConfigServer

Spring Cloud Config可以用来作分布式配置中心,本质上ConfigServer会从git / svn / 本地目录上下载到本地环境,EnvironmentController提供了一些了接口给ConfigClient启动时调用,EnvironmentController会返回本地缓存的配置文件给ConfigClient,从而实现分布式配置

 

首先我们需要创建一个server端工程,pom代码如下

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hlab.gongura</groupId>
    <artifactId>gongura</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>gongura</name>
    <description>Config Server</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <!-- Generic properties -->
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
        <springfox-version>2.6.1</springfox-version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
      
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

application.yml配置

server:
  port: 8888


spring:

#config server 配置 ,从git获取配置
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/**********
#          username: *******   如果是私有项目需要填写
#          password: *******    如果是私有项目需要填写

uri填写git地址,这里的配置是从git获取的,也可以使用本地文件填写配置

 

Application主类代码,主要是@EnableConfigServer

package com.hlab.gongura;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@EnableEurekaClient
@EnableFeignClients
@SpringBootApplication
@EnableConfigServer
public class GonguraApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(GonguraApplication.class, args);
    }
}

配置完成后试下访问看看得到的结果

{
	"name": "application-dev",
	"profiles": ["default"],
	"label": null,
	"version": null,
	"state": null,
	"propertySources": [{
		"name": "https://gitee.com/CheungQ/spring-cloud-config-repository/application-dev.yml",
		"source": {
			"demo.title": "new 新内容 (yml 11文件)"
		}
	}]
}

远程git中的配置文件application-prod.yml中的内容为

demo:
  title: "prod env title"

至此,server端配置完成,接下来我们要配置的是client端,client端其实就是一个普通的工程,在resources目录下创建一个新的配置文件bootstrap.yml,注意不是application.yml,内容如下

spring:
  application:
    name:  orchid-client
  cloud:
    config:
      uri: http://localhost:8888
      name: application
      profile: prod

 

接下来就可以直接用@value注解获取配置了,另外有个tips,本地配置中最好加下对应的配置,比如我在application.yml中加了

demo:
  title: "本地"

 

否则会报错

 

文档:https://springcloud.cc/spring-cloud-config-zhcn.html#true-encryption-and-decryption

《紫罗兰永恒花园》小说 上卷 第二卷第八章 自动书记人偶

这个名字引起骚动已经是很久之前的事情了。

制作者是在机械人偶方面的权威奥兰多博士。

说起来她的妻子小说家茉莉由于后天原因失去了视力,才是这一切的开始。

失去视力的茉莉由于丧失了自己人生的意义变得无法创作而非常消沉,一天一天地衰弱下去。

看不下去的奥兰多博士制造出来的便是自动书记人偶。

能够掌握设定为主人的声音,将人声的言语记录下来的,实现了所谓「代笔」的机器。

虽然当初是为了深爱的妻子制造的机器,之后却成为了许多人的支柱而普及起来。

现在也有了能够提供廉价出借自动人偶服务的机构。

在这个世界从事著代笔屋的人们被称为『自动书记人偶』。

从以前开始就是被人敬慕的职业。

在使用自动书记人偶的业界,有著格外有名的人物。

玲珑动人的声音,以及与此相符的美貌。 Continue reading

《紫罗兰永恒花园》小说 上卷 第二卷第七章 薇尔莉特?伊芙加登

最近终于完成了从南边的海洋国家莱登沙佛特里黑通往北方诸国的铁路。薇尔莉特?伊芙加登

公共交通设施对在广阔大陆中的移动起到非常大的作用,横贯大陆蒸汽火车不仅限于载人,在物流方面也对社会有极大的贡献。此次的成果可以说正是由于南北之间的不和在表面上告一段落才能实现。

横贯大陆蒸汽火车将要举办启程仪式的消息一下子就在首都莱顿扩散开来,想购买首次运行乘车券的人们蜂拥而至。等待第二天的启程仪式,刊登那个情景的晨报不仅在国内发行也运送到了国外。

虽然对于没有兴趣的人是一些不值一提的事情,但是刊登著购买乘车券人们的照片中一位女子的姿态在认识她的人群中不好不坏地悄悄扩散著。

早上,C?H邮便社第一个上班的拉克丝?希比拉看到自己美丽友人的身影自豪地笑了。在山中静静地编织著故事的小说家看到报纸上的照片像是看到了宝贝一样,非常高兴地把照片裁下来装饰在墙上。旅行途中的年轻天文学家在一瞬见呆滞了之后将同样的报纸又买了一份,在远离本部的地方执行代笔任务的卡特蕾雅用单手指著报纸,向男性委托人询问自己和她谁更可爱。

许久未曾见到那张面孔的人任由指尖描摹著报纸。

虽然不过只是一张照片,对于和薇尔莉特?伊芙加登有关的人们来说,却好像在心中印象深刻地刻下了将会有什么特别的事情即将发生的启示,就是这样的一个清晨。

午后两点在莱登沙佛特里黑站举行启程典礼结束之后,午后三点横贯大陆蒸汽火车将载著乘客从城镇出发。第一次坐蒸汽火车的孩子们从窗户探出身体称赞著景色,为能够乘上开始运行的第一班车彼此间骄傲地自夸著。

因为工作上移动而搭乘的客人满足于周到的会客和安全的行驶,预约到卧铺车厢的人被舒适侵袭身心迅速地陷入梦乡。 Continue reading

《紫罗兰永恒花园》小说 上卷 第二卷第六章 飞行信纸和自动书记人偶 后篇

业风在街道上、村庄里、森里之中吹过,人们因风势甚大而发出爽朗的笑声。

呼啸的风声宛如天籁之音。沧海之空用太阳的恩惠祝福著大地。

那天从午后开始到傍晚都刮著急剧的大风。那势头与其说是风不如说是像龙一般翻滚身体蹂躏著大地。风之龙掠过之后和树叶声虫鸟声一起演奏出大合唱。

被森林包围著的莱顿沙佛特里黑陆军所有的空军基地演习场也成了风儿的游乐场。

从为了今天这特别的一天无数次来往反覆的公共运行车上走下许多迟来的客人。然后带著空无一人的车厢再回到街道上去。从车上下来的的同行者之间开心地聊著天的同时从林间穿过。走在林间道路上的时候就听到了在空中舞动战斗机的盘旋声,因此喧哗起来发出欢呼声。

第七次航空展览会开办了。在这之中,也有著克劳迪娅?霍金斯带领的C?H邮便社成员的身影。从事务所的内勤人员到完成配送的邮差都是一副被解放感包围的面容行走著。

「……」

「开心一点嘛,小拉克丝。」

在看似都很开心的人群中,唯有拉克丝一人板著脸。

三十多岁的社长拚命地挤出笑容向作为秘书的少女搭话著。

想著自己也是孩子气,拉克丝将胸中无法释怀的感情吐露出来。 Continue reading

《紫罗兰永恒花园》小说 上卷 第二卷第五章 飞行信纸和自动书记人偶 前篇

那个自动书记人偶的假日在寂静中结束。

度过夏末的方式基本上是决定好的。清晨未至就从窗边眺望庭园里的树木,过了正午就在布有阳伞的宅邸周边散步。到斜阳将一切都包裹住之前在树荫下看书,夜晚为下一次旅行做准备。

基本上是在没有旁人的地方进行枪支的分解和组装,为了不让胳膊变迟钝向从树上落下的树叶投掷小刀,没错。

基本上是处于平静之中的。这些大概是将她像孩子般对待的养父母影响的恩赐吧。

说到底会特意去打破她的静寂的人几乎没有。

因为是会给予人以,名为胆怯的感情的存在。

既沉默寡言,又是冰冷美貌的持有者。被自然所包围的时候甚至连人的气息都消声其中。

「薇尔莉特,你啊,要和我一起来喏。」

是不会想要去邀请玩耍的对象。

飞行信纸和自动书记人偶 前篇

莱登沙佛特里黑,首都莱登。 Continue reading

《紫罗兰永恒花园》小说 上卷 第二卷第四章 新郎和自动书记人偶

清晨的月亮漂浮在苍穹之上。

没有比虚幻而又朦胧的夜天之月更能给予月下众生压倒性存在感的景色。但是溶入天空中温柔色彩的月亮与满月有著同样停止时间般让人看入迷的魅力。一望无际的草原和小花这一田园诗般的风景互相调和后就像童话中的插绘一样。

「妈妈」

在这天国一般的风景中,有著一位连月色也不在意一心不乱来回奔走的年轻男子。

穿著长裤、衬衫外穿著羽织的样子非常著急,就是这样的外表。

被称为油加利盆地的这一带有很多未开阔的土地,从城镇走到城镇、村庄走到村庄的距离用脚的话差不多需要半天。定期来往的车辆一天只通过一次,如果错过那个的话地区居民或是旅人就需要自己走或是依赖别的交通手段。在这样的野原世界中,可能会认为障碍物很少要寻人大概很简单但是实际上并非如此。

「……妈妈!」

广阔,便是寻人最大的障碍。

如果要一处不漏地寻找会很花时间,如果寻找的对像在寻找过了的场所之间移动的话也难也察觉。

「……可恶、为啥我要做这种……」 Continue reading