0%

WSL修改安装位置

1
wsl --list

导出分发版为tar文件到d盘

1
wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar

注销当前分发版

1
wsl --unregister Ubuntu-20.04

重新导入并安装WSL在d:\wsl-ubuntu20.04

1
wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar

设置默认登陆用户为安装时用户名

1
ubuntu2004 config --default-user Username

共享目录

  • 右键点击要共享的文件夹,选择“属性”。

  • 转到“共享”选项卡,点击“高级共享”。

  • 勾选“共享此文件夹”,点击“权限”按钮

  • 添加或删除用户和组,根据需要设置权限。

设置防火墙规则限制IP

  • 打开“控制面板”,选择“系统和安全”,然后选择“Windows Defender防火墙”。

  • 在左侧菜单中,选择“高级设置”。

  • 在“高级安全Windows Defender防火墙”窗口中,选择“入站规则”。

  • 在右侧操作菜单中,选择“新建规则”。

  • 选择“自定义”,然后点击“下一步”。

  • 选择“此程序路径”,输入 C:\Windows\System32\svchost.exe,点击“下一步”。

  • 选择“所有端口”,点击“下一步”。

  • 选择“这些IP地址”,然后点击“添加”,输入要允许访问的IP地址,点击“确定”。

  • 点击“下一步”,选择“允许连接”。

  • 指定规则名称,如“允许特定IP访问共享文件夹”,然后点击“完成”。

阻止其他IP地址

  • 再次创建一个新规则,按照上述步骤进行。

  • 但在步骤8中,选择“阻止这些IP地址”,输入要阻止的IP地址,或选择“任何IP地址”以阻止所有未明确允许的IP地址。

  • 在步骤9中,选择“阻止连接”。

支持的平台

WinSW 可以在安装在.NET Framework 4.6.1 或更高版本的Windows 平台上运行。对于没有 .NET Framework 的系统,该项目提供基于 .NET 7 的本机 64 位和 32 位可执行文件。

下载

GitHub Releases

开始使用

创建配置文件

1
2
3
4
5
6
7
8
9
<service>
<id>my-server</id>
<name>my-server</name>
<description>this service is my-server</description>
<env name="HOST" value="127.0.0.1"/>
<executable>java</executable>
<arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
<log mode="roll"></log>
</service>

安装服务

winsw.exe 与配置文件放在同一目录下

1
2
3
4
5
6
$ winsw install  # 安装服务
$ winsw uninstall # 卸载服务
$ winsw start # 启动服务
$ winsw stop # 停止服务
$ winsw restart # 重启服务
$ winsw status # 查看服务状态

其他命令请查看官方文档

TS 中 interface 和 type 的区别是什么

不同点

  • type 可用于 string、number、bool、undefined、null 和元组,而 interface 只能描述对象(含数组、函数、包装对象)

  • 同名 interface 会合并,而同名 type 会报错

  • type 声明的是类型别名,而 interface 声明的是新类型。

相同点

  • 都能描述对象(含数组、函数、包装对象)

  • 都能用于扩展一个类型。type 用交叉类型做到这一点,interface 用 extends 做到这一点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


public void removeMessage(String queuesName, String messageId)
throws Exception {
String jmsUrl="192.168.14.152:11099"
String url = String.format("service:jmx:rmi:///jndi/rmi://%s/jmxrmi", jmsUrl);
JMXServiceURL urls = new JMXServiceURL(url);

JMXConnector connector = JMXConnectorFactory.connect(urls, null);
connector.connect();
MBeanServerConnection conn = connector.getMBeanServerConnection();


ObjectName name = new ObjectName("myDomain:brokerName=localhost,type=Broker");
BrokerViewMBean mBean = (BrokerViewMBean) MBeanServerInvocationHandler.newProxyInstance
(conn, name, BrokerViewMBean.class, true);

for (ObjectName na : mBean.getQueues()) {
QueueViewMBean queueBean = (QueueViewMBean)
MBeanServerInvocationHandler.newProxyInstance
(conn, na, QueueViewMBean.class, true);


if (queueBean.getName().equals(queuesName)) {
queueBean.removeMessage(messageId);
break;
}

// System.out.println("******************************");
// System.out.println("队列的名称:" + queueBean.getName());
// System.out.println("队列中剩余的消息数:" + queueBean.getQueueSize());
// System.out.println("消费者数:" + queueBean.getConsumerCount());
// System.out.println("消息入队的数量:" + queueBean.getEnqueueCount());
// System.out.println("消息出队的数量:" + queueBean.getDequeueCount());
}

}

修改mq配置

bin/env

1
2
 ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.14.152"
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Djava.rmi.server.hostname=192.168.14.152 -Dcom.sun.management.jmxremote.port=11099 -Dcom.sun.management.jmxremote.rmi.port=11099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "

activemq.xml

1
<broker xmlns="http://activemq.apache.org/schema/core" schedulePeriodForDestinationPurge="30000"  useJmx="true"  brokerName="localhost" dataDirectory="${activemq.data}">

发送消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Session session = null;
Connection connection = null;
MessageProducer producer = null;

ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory(aqUrl);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText(messageContent);
message.setJMSReplyTo(destination);
producer.send(destination, message);

producer.send(message);

return message.getJMSMessageID();

1
2

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35


@RestControllerAdvice(value = "cn.xx996")
public class CommonResponseDataAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}

@Override
public Object beforeBodyWrite(Object o, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse serverHttpResponse) {

CommonResponse<Object> response = new CommonResponse<>("", 0);

if (null == o) {
return response;
} else if (o instanceof CommonResponse) {
response = (CommonResponse<Object>) o;
} else if (o instanceof String) {

//返回是String类型时,单独处理。转换成JSON字符串即可
response.setData(o);
return JSON.toJSONString(response);
} else {
response.setData(o);
}

return response;

}
}




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
http {
include mime.types;
default_type application/octet-stream;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}


location /socketserver {

proxy_pass http://127.0.0.1:8082;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}


1
2
3
4
5
6
7
8
@Data
@AllArgsConstructor
public class SearchCriteria {
private String key;
private Object value;
private SearchOperation operation;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum SearchOperation {

GREATER_THAN,
LESS_THAN,
GREATER_THAN_EQUAL,
LESS_THAN_EQUAL,
NOT_EQUAL,
EQUAL,
LIKE,
LIKE_START,
LIKE_END,
IN,
NOT_IN
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

public class Specification<T> implements Specification<T> {
private List<SearchCriteria> list = new ArrayList<>();

public void add(SearchCriteria criteria) {
list.add(criteria);
}


@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<>();
for (SearchCriteria criteria : list) {
switch (criteria.getOperation()) {
case GREATER_THAN:
predicates.add(builder.greaterThan(root.get(criteria.getKey()), criteria.getValue().toString()));
break;
case LESS_THAN:
predicates.add(builder.lessThan(root.get(criteria.getKey()), criteria.getValue().toString()));
break;
case GREATER_THAN_EQUAL:
predicates.add(builder.greaterThanOrEqualTo(root.get(criteria.getKey()), criteria.getValue().toString()));
break;
case LESS_THAN_EQUAL:
predicates.add(builder.lessThanOrEqualTo(root.get(criteria.getKey()), criteria.getValue().toString()));
break;
case NOT_EQUAL:
predicates.add(builder.notEqual(root.get(criteria.getKey()), criteria.getValue()));
break;
case EQUAL:
predicates.add(builder.equal(root.get(criteria.getKey()), criteria.getValue()));
break;
case LIKE:
predicates.add(builder.like(builder.lower(root.get(criteria.getKey())), "%" + criteria.getValue().toString().toLowerCase() + "%"));
break;
case LIKE_END:
predicates.add(builder.like(builder.lower(root.get(criteria.getKey())), criteria.getValue().toString().toLowerCase() + "%"));
break;
case LIKE_START:
predicates.add(builder.like(builder.lower(root.get(criteria.getKey())), "%" + criteria.getValue().toString().toLowerCase()));
break;
case IN:
predicates.add(builder.in(root.get(criteria.getKey())).value(criteria.getValue()));
break;
case NOT_IN:
predicates.add(builder.not(root.get(criteria.getKey())).in(criteria.getValue()));
break;
}
}
return builder.and(predicates.toArray(new Predicate[0]));
}
}

1
2
3
4
5
6
7
8
9
10
11
12
@PostMapping
ResponseEntity specification(@RequestBody List<SearchCriteria> searchCriteria) {
UserSpecification<UserEntity> appleSpecification = new UserSpecification();
searchCriteria.stream().map(
searchCriterion -> new SearchCriteria(searchCriterion.getKey(),
searchCriterion.getValue(),
searchCriterion.getOperation())).forEach(appleSpecification::add);
List<UserEntity> msGenreList = userDao.findAll(appleSpecification);
msGenreList.forEach(System.out::println);

return ResponseEntity.status(HttpStatus.OK).body(msGenreList);
}