shade打包后对于META-INF/services数据丢失

GeoTools 中的 ReferencingFactoryFinder 类用于查找和获取 CRS(坐标参考系统)工厂类实例,其主要查找路径和实现机制如下:

  1. 它会查找所有 META-INF/services/目录下名为 org.opengis.referencing.Factory 的文件。

thymeleaf渲染

解决Thymeleaf模板引擎中的自定义属性和XML命名空间问题

Thymeleaf是一个流行的模板引擎,常用于生成HTML页面。在使用Thymeleaf时,我们可能会遇到自定义属性和XML命名空间的问题。这篇文章将介绍如何使用Thymeleaf来解决这些问题,并提供了一些实际示例。

前情介绍

在使用Thymeleaf时,有两个常见问题需要解决:

modelmap的使用和部分配置介绍

ModelMapper 是一个智能的Java对象映射库,它提供了一种方便高效的方式来映射不同模型之间的对象,使得在不同模型之间转换数据变得更加容易。

使用ModelMapper,开发者可以使用简单直观的API定义对象之间的映射关系。它支持不同属性名称或类型之间的映射,使用自定义转换器处理复杂映射,甚至可以映射嵌套对象。

ModelMapper 的一个关键特点是它能够根据属性的名称和类型智能地确定如何进行映射,这消除了开发者为每个属性编写手动映射代码的需求,节省了时间和精力。ModelMapper 还提供了条件映射等高级功能,允许开发者定义属性何时应该映射或不映射的规则。

使用Lettuce客户端或者redis连接变化时的触发事件

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

@Configuration
@EnableCaching
public class CacheConfig {

@Bean
public RedisConnectionFactory redisConnectionFactory() {

RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName("127.0.0.1");
config.setPort(11);
config.setPassword("root");

return new LettuceConnectionFactory(config);
}

@Primary
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();

template.setConnectionFactory(factory);

StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);

template.setHashKeySerializer(stringRedisSerializer);

GenericJackson2JsonRedisSerializer redisSerializer = new GenericJackson2JsonRedisSerializer();
template.setValueSerializer(redisSerializer);

template.setHashValueSerializer(redisSerializer);
return template;

}

@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {

RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
new GenericJackson2JsonRedisSerializer())).disableCachingNullValues();

return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build();
}
}

Windows下bat脚本文件编写

先给个实例来表示 使用杀死 指定端口

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
@echo off
set default_port=8080
set /p port=type need killed port (press enter for default port %default_port%): %=%
if "%port%"=="" set "port=%default_port%"
rem set /p port=type need killed port:

for /f "tokens=5 delims= " %%a IN ('netstat -a -n -o ^| findstr :%port%.*LISTENING') do (
set pid=%%a
)
if not defined pid (
echo not found port %port%
) else (
taskkill /F /pid %pid%
echo already kill %port%
)


set /p port=type need killed port:
for /f "tokens=5 delims= " %%a IN ('netstat -a -n -o ^| findstr :%port%.*LISTENING') do (
set pid=%%a
)
if not defined pid (
echo not found port %port%
) else (
taskkill /F /pid %pid%
echo already kill %port%
)



set /p port=type need killed port:
for /f "tokens=5 delims= " %%a IN ('netstat -a -n -o ^| findstr :%port%.*LISTENING') do (
set pid=%%a
)
if not defined pid (
echo not found port %port%
) else (
taskkill /F /pid %pid%
echo already kill %port%
)


pause

Geotools中关于filter和ECQL的介绍

filter和ECQL的介绍

在geotools中有datastore就需要对应数据源的查询这边是基于opengis定义的接口来定义现在先看下

filter这个类的介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface Filter {

//使用Filter.INCLUDE过滤集合将会返回原始集合。
IncludeFilter INCLUDE = new IncludeFilter();

//使用Filter.EXCLUDE过滤集合将会返回空集合。
ExcludeFilter EXCLUDE = new ExcludeFilter();


//给定一个对象,确定此过滤器对象所表示的测试是否通过。如果测试通过,则返回true,否则返回false
boolean evaluate(Object object);

//接受一个访问者(FilterVisitor)。实现所有子接口必须具有以下内容的方法:
//visitor.visit(this, extraData);
Object accept(FilterVisitor visitor, Object extraData);
}