Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KnowledgePlanet
road-map
xfg-dev-tech-guava
提交
da249b1a
xfg-dev-tech-guava
项目概览
KnowledgePlanet
/
road-map
/
xfg-dev-tech-guava
通知
30
Star
7
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
xfg-dev-tech-guava
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
da249b1a
编写于
10月 08, 2023
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
小傅哥,feat:Guava 工具对象使用
上级
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
670 addition
and
0 deletion
+670
-0
.gitignore
.gitignore
+39
-0
pom.xml
pom.xml
+107
-0
xfg-dev-tech-app/pom.xml
xfg-dev-tech-app/pom.xml
+101
-0
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/Application.java
...p/src/main/java/cn/bugstack/xfg/dev/tech/Application.java
+15
-0
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/GuavaCacheConfig.java
...ava/cn/bugstack/xfg/dev/tech/config/GuavaCacheConfig.java
+20
-0
xfg-dev-tech-app/src/main/resources/application-dev.yml
xfg-dev-tech-app/src/main/resources/application-dev.yml
+9
-0
xfg-dev-tech-app/src/main/resources/application-prod.yml
xfg-dev-tech-app/src/main/resources/application-prod.yml
+9
-0
xfg-dev-tech-app/src/main/resources/application-test.yml
xfg-dev-tech-app/src/main/resources/application-test.yml
+9
-0
xfg-dev-tech-app/src/main/resources/application.yml
xfg-dev-tech-app/src/main/resources/application.yml
+5
-0
xfg-dev-tech-app/src/main/resources/logback-spring.xml
xfg-dev-tech-app/src/main/resources/logback-spring.xml
+114
-0
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/ApiTest.java
.../src/test/java/cn/bugstack/xfg/dev/tech/test/ApiTest.java
+179
-0
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/entity/UserEntity.java
...java/cn/bugstack/xfg/dev/tech/test/entity/UserEntity.java
+21
-0
xfg-dev-tech-infrastructure/pom.xml
xfg-dev-tech-infrastructure/pom.xml
+38
-0
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/cache/GuavaCache.java
...ugstack/xfg/dev/tech/infrastructure/cache/GuavaCache.java
+4
-0
未找到文件。
.gitignore
0 → 100644
浏览文件 @
da249b1a
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
pom.xml
0 → 100644
浏览文件 @
da249b1a
<?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>
cn.bugstack
</groupId>
<artifactId>
xfg-dev-tech-guava
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<packaging>
pom
</packaging>
<modules>
<module>
xfg-dev-tech-app
</module>
<module>
xfg-dev-tech-infrastructure
</module>
</modules>
<properties>
<java.version>
1.8
</java.version>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.target>
8
</maven.compiler.target>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.7.12
</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
2.0.28
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
3.9
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
<version>
32.1.2-jre
</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>
xfg-dev-tech
</finalName>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.0
</version>
<configuration>
<source>
${java.version}
</source>
<target>
${java.version}
</target>
<encoding>
${project.build.sourceEncoding}
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-resources-plugin
</artifactId>
<version>
2.5
</version>
<configuration>
<encoding>
UTF-8
</encoding>
</configuration>
</plugin>
<!-- 统一设定POM版本信息插件 -->
<plugin>
<groupId>
org.codehaus.mojo
</groupId>
<artifactId>
versions-maven-plugin
</artifactId>
<version>
2.7
</version>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>
dev
</id>
<activation>
<activeByDefault>
true
</activeByDefault>
</activation>
<properties>
<profileActive>
dev
</profileActive>
</properties>
</profile>
<profile>
<id>
test
</id>
<properties>
<profileActive>
test
</profileActive>
</properties>
</profile>
<profile>
<id>
prod
</id>
<properties>
<profileActive>
prod
</profileActive>
</properties>
</profile>
</profiles>
</project>
\ No newline at end of file
xfg-dev-tech-app/pom.xml
0 → 100644
浏览文件 @
da249b1a
<?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>
<parent>
<groupId>
cn.bugstack
</groupId>
<artifactId>
xfg-dev-tech-guava
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<artifactId>
xfg-dev-tech-app
</artifactId>
<packaging>
jar
</packaging>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</dependency>
<dependency>
<groupId>
cn.bugstack
</groupId>
<artifactId>
xfg-dev-tech-infrastructure
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
<build>
<finalName>
xfg-dev-tech-app
</finalName>
<resources>
<resource>
<directory>
src/main/resources
</directory>
<filtering>
true
</filtering>
<includes>
<include>
**/**
</include>
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>
src/test/resources
</directory>
<filtering>
true
</filtering>
<includes>
<include>
**/**
</include>
</includes>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
2.6
</version>
<configuration>
<skipTests>
true
</skipTests>
<testFailureIgnore>
false
</testFailureIgnore>
<includes>
<include>
**/*Test.java
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<mainClass>
cn.bugstack.xfg.dev.tech.Application
</mainClass>
<layout>
JAR
</layout>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/Application.java
0 → 100644
浏览文件 @
da249b1a
package
cn.bugstack.xfg.dev.tech
;
import
org.springframework.beans.factory.annotation.Configurable
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
@Configurable
public
class
Application
{
public
static
void
main
(
String
[]
args
){
SpringApplication
.
run
(
Application
.
class
);
}
}
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/GuavaCacheConfig.java
0 → 100644
浏览文件 @
da249b1a
package
cn.bugstack.xfg.dev.tech.config
;
import
com.google.common.cache.Cache
;
import
com.google.common.cache.CacheBuilder
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.concurrent.TimeUnit
;
@Configuration
public
class
GuavaCacheConfig
{
@Bean
(
name
=
"codeCache"
)
public
Cache
<
String
,
String
>
codeCache
()
{
return
CacheBuilder
.
newBuilder
()
.
expireAfterWrite
(
3
,
TimeUnit
.
MINUTES
)
.
build
();
}
}
xfg-dev-tech-app/src/main/resources/application-dev.yml
0 → 100644
浏览文件 @
da249b1a
server
:
port
:
8091
# 日志
logging
:
level
:
root
:
info
config
:
classpath:logback-spring.xml
\ No newline at end of file
xfg-dev-tech-app/src/main/resources/application-prod.yml
0 → 100644
浏览文件 @
da249b1a
server
:
port
:
8091
# 日志
logging
:
level
:
root
:
info
config
:
classpath:logback-spring.xml
\ No newline at end of file
xfg-dev-tech-app/src/main/resources/application-test.yml
0 → 100644
浏览文件 @
da249b1a
server
:
port
:
8091
# 日志
logging
:
level
:
root
:
info
config
:
classpath:logback-spring.xml
\ No newline at end of file
xfg-dev-tech-app/src/main/resources/application.yml
0 → 100644
浏览文件 @
da249b1a
spring
:
config
:
name
:
xfg-dev-tech
profiles
:
active
:
dev
xfg-dev-tech-app/src/main/resources/logback-spring.xml
0 → 100644
浏览文件 @
da249b1a
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<configuration
scan=
"true"
scanPeriod=
"10 seconds"
>
<contextName>
logback
</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<springProperty
scope=
"context"
name=
"log.path"
source=
"logging.path"
/>
<!-- 日志格式 -->
<conversionRule
conversionWord=
"clr"
converterClass=
"org.springframework.boot.logging.logback.ColorConverter"
/>
<conversionRule
conversionWord=
"wex"
converterClass=
"org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"
/>
<conversionRule
conversionWord=
"wEx"
converterClass=
"org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"
/>
<!-- 输出到控制台 -->
<appender
name=
"CONSOLE"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<!-- 此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息 -->
<filter
class=
"ch.qos.logback.classic.filter.ThresholdFilter"
>
<level>
info
</level>
</filter>
<encoder>
<pattern>
%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
</pattern>
<charset>
UTF-8
</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender
name=
"INFO_FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!-- 正在记录的日志文件的路径及文件名 -->
<file>
./data/log/log_info.log
</file>
<!--日志文件输出格式-->
<encoder>
<pattern>
%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
</pattern>
<charset>
UTF-8
</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>
./data/log/log-info-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>
15
</maxHistory>
<totalSizeCap>
10GB
</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender
name=
"ERROR_FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!-- 正在记录的日志文件的路径及文件名 -->
<file>
./data/log/log_error.log
</file>
<!--日志文件输出格式-->
<encoder>
<pattern>
%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n
</pattern>
<charset>
UTF-8
</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>
./data/log/log-error-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文件保留天数【根据服务器预留,可自行调整】 -->
<maxHistory>
7
</maxHistory>
<totalSizeCap>
5GB
</totalSizeCap>
</rollingPolicy>
<!-- WARN 级别及以上 -->
<filter
class=
"ch.qos.logback.classic.filter.ThresholdFilter"
>
<level>
WARN
</level>
</filter>
</appender>
<!-- 异步输出 -->
<appender
name=
"ASYNC_FILE_INFO"
class=
"ch.qos.logback.classic.AsyncAppender"
>
<!-- 队列剩余容量小于discardingThreshold,则会丢弃TRACT、DEBUG、INFO级别的日志;默认值-1,为queueSize的20%;0不丢失日志 -->
<discardingThreshold>
0
</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>
8192
</queueSize>
<!-- neverBlock:true 会丢失日志,但业务性能不受影响 -->
<neverBlock>
true
</neverBlock>
<!--是否提取调用者数据-->
<includeCallerData>
false
</includeCallerData>
<appender-ref
ref=
"INFO_FILE"
/>
</appender>
<appender
name=
"ASYNC_FILE_ERROR"
class=
"ch.qos.logback.classic.AsyncAppender"
>
<!-- 队列剩余容量小于discardingThreshold,则会丢弃TRACT、DEBUG、INFO级别的日志;默认值-1,为queueSize的20%;0不丢失日志 -->
<discardingThreshold>
0
</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>
1024
</queueSize>
<!-- neverBlock:true 会丢失日志,但业务性能不受影响 -->
<neverBlock>
true
</neverBlock>
<!--是否提取调用者数据-->
<includeCallerData>
false
</includeCallerData>
<appender-ref
ref=
"ERROR_FILE"
/>
</appender>
<!-- 开发环境:控制台打印 -->
<springProfile
name=
"dev"
>
<logger
name=
"com.nmys.view"
level=
"debug"
/>
</springProfile>
<root
level=
"info"
>
<appender-ref
ref=
"CONSOLE"
/>
<!-- 异步日志-INFO -->
<appender-ref
ref=
"ASYNC_FILE_INFO"
/>
<!-- 异步日志-ERROR -->
<appender-ref
ref=
"ASYNC_FILE_ERROR"
/>
</root>
</configuration>
\ No newline at end of file
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/ApiTest.java
0 → 100644
浏览文件 @
da249b1a
package
cn.bugstack.xfg.dev.tech.test
;
import
cn.bugstack.xfg.dev.tech.test.entity.UserEntity
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Objects
;
import
com.google.common.cache.Cache
;
import
com.google.common.cache.CacheBuilder
;
import
com.google.common.cache.Weigher
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.hash.BloomFilter
;
import
com.google.common.hash.Funnels
;
import
com.google.common.net.InternetDomainName
;
import
com.google.common.reflect.Invokable
;
import
com.google.common.util.concurrent.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.Test
;
import
java.lang.reflect.Method
;
import
java.nio.charset.Charset
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Optional
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.TimeUnit
;
/**
* Guava https://github.com/google/guava/wiki
*/
@Slf4j
public
class
ApiTest
{
/**
* 功能:基本工具
* 文档:
*/
@Test
public
void
test_ObjectCommonMethods
()
{
UserEntity
userEntity
=
UserEntity
.
builder
()
.
amount
(
100
D
)
.
userName
(
"xfg"
)
.
password
(
"abc000"
)
.
createTime
(
new
Date
())
.
build
();
log
.
info
(
"测试结果 isEqual: {}"
,
Objects
.
equal
(
userEntity
,
null
));
Optional
<
Integer
>
possible
=
Optional
.
of
(
5
);
log
.
info
(
"测试结果 isPresent: {} get: {}"
,
possible
.
isPresent
(),
possible
.
get
());
}
/**
* 功能:不可变集合
* 文档:https://github.com/google/guava/wiki/ImmutableCollectionsExplained
*/
@Test
public
void
test_immutable
()
{
ImmutableList
<
String
>
list
=
ImmutableList
.
of
(
"a"
,
"b"
,
"c"
);
}
/**
* 功能:缓存
* 文档:<a href="https://github.com/google/guava/wiki/CachesExplained">CachesExplained</a>
*/
@Test
public
void
test_cache
()
{
Cache
<
String
,
String
>
cache
=
CacheBuilder
.
newBuilder
()
// 最大存储条数,缓存将尝试逐出最近或不经常使用的条目
.
maximumSize
(
10000
)
// 可以设定删除时候的权重判断
.
weigher
((
Weigher
<
String
,
String
>)
(
x
,
y
)
->
x
.
length
()
-
y
.
length
())
// 有效时间
.
expireAfterWrite
(
3
,
TimeUnit
.
SECONDS
)
// 记录次数
.
recordStats
()
.
build
();
cache
.
put
(
"xfg"
,
"bugstack.cn"
);
log
.
info
(
"测试结果:{}"
,
cache
.
getIfPresent
(
"xfg"
));
cache
.
invalidate
(
"xfg"
);
// cache.invalidateAll(); 也可以全部删除
log
.
info
(
"测试结果:{}"
,
cache
.
getIfPresent
(
"xfg"
));
log
.
info
(
"测试结果:{}"
,
cache
.
stats
());
}
/**
* 功能:并发回调
* 文档:https://github.com/google/guava/wiki/ListenableFutureExplained
*/
@Test
public
void
test_ListenableFuture
()
throws
InterruptedException
{
CountDownLatch
countDownLatch
=
new
CountDownLatch
(
1
);
ListeningExecutorService
executorService
=
MoreExecutors
.
listeningDecorator
(
Executors
.
newFixedThreadPool
(
10
));
ListenableFuture
<
String
>
explosion
=
executorService
.
submit
(()
->
"finished"
);
ExecutorService
callBackService
=
Executors
.
newFixedThreadPool
(
1
);
Futures
.
addCallback
(
explosion
,
new
FutureCallback
<
String
>()
{
public
void
onSuccess
(
String
explosion
)
{
System
.
out
.
println
(
"onSuccess"
);
countDownLatch
.
countDown
();
}
public
void
onFailure
(
Throwable
thrown
)
{
System
.
out
.
println
(
"onFailure"
);
countDownLatch
.
countDown
();
}
},
callBackService
);
countDownLatch
.
await
();
}
/**
* 功能:字符串
* 文档:https://github.com/google/guava/wiki/StringsExplained
*/
@Test
public
void
test_StringsExplained
()
{
Joiner
joiner
=
Joiner
.
on
(
"; "
).
skipNulls
();
log
.
info
(
"测试结果:{}"
,
joiner
.
join
(
"Harry"
,
null
,
"Ron"
,
"Hermione"
));
log
.
info
(
"测试结果:{}"
,
Joiner
.
on
(
","
).
join
(
Arrays
.
asList
(
1
,
5
,
7
)));
}
/**
* 功能:域名截取
* 文档:https://github.com/google/guava/wiki/InternetDomainNameExplained
*/
@Test
public
void
test_InternetDomainName
()
{
InternetDomainName
owner
=
InternetDomainName
.
from
(
"mail.google.com"
).
topPrivateDomain
();
log
.
info
(
"测试结果:{}"
,
owner
.
topPrivateDomain
());
}
/**
* 功能:布隆过滤器
* 文档:https://github.com/google/guava/wiki/HashingExplained#bloomfilter
*/
@Test
public
void
test_BloomFilter
()
{
BloomFilter
<
String
>
bloomFilter
=
BloomFilter
.
create
(
Funnels
.
stringFunnel
(
Charset
.
defaultCharset
()),
1000
,
0.01
);
// 向布隆过滤器中添加元素
bloomFilter
.
put
(
"apple"
);
bloomFilter
.
put
(
"banana"
);
bloomFilter
.
put
(
"orange"
);
// 检查元素是否存在于布隆过滤器中
System
.
out
.
println
(
bloomFilter
.
mightContain
(
"apple"
));
// true
System
.
out
.
println
(
bloomFilter
.
mightContain
(
"banana"
));
// true
System
.
out
.
println
(
bloomFilter
.
mightContain
(
"orange"
));
// true
System
.
out
.
println
(
bloomFilter
.
mightContain
(
"grape"
));
// false
// 输出布隆过滤器的统计信息
System
.
out
.
println
(
"Expected FPP: "
+
bloomFilter
.
expectedFpp
());
System
.
out
.
println
(
"Number of Inserted Elements: "
+
bloomFilter
.
approximateElementCount
());
}
/**
* 功能:反射
* 文档:https://github.com/google/guava/wiki/ReflectionExplained
*/
@Test
public
void
test_Invokable
()
throws
NoSuchMethodException
{
Method
method
=
UserEntity
.
class
.
getMethod
(
"getUserName"
);
Invokable
<?,
?>
invokable
=
Invokable
.
from
(
method
);
log
.
info
(
"测试结果 - 方法名称:{}"
,
invokable
.
getName
());
log
.
info
(
"测试结果 - 参数类型:{}"
,
JSON
.
toJSONString
(
invokable
.
getTypeParameters
()));
log
.
info
(
"测试结果 - 静态判断:{}"
,
invokable
.
isStatic
());
// !(Modifier.isFinal(method.getModifiers()) || Modifiers.isPrivate(method.getModifiers()) || Modifiers.isStatic(method.getModifiers()) || Modifiers.isFinal(method.getDeclaringClass().getModifiers()))
log
.
info
(
"测试结果 - isOverridable:{}"
,
invokable
.
isOverridable
());
}
}
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/entity/UserEntity.java
0 → 100644
浏览文件 @
da249b1a
package
cn.bugstack.xfg.dev.tech.test.entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
UserEntity
{
private
String
userName
;
private
String
password
;
private
Double
amount
;
private
Date
createTime
;
}
xfg-dev-tech-infrastructure/pom.xml
0 → 100644
浏览文件 @
da249b1a
<?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>
<parent>
<groupId>
cn.bugstack
</groupId>
<artifactId>
xfg-dev-tech-guava
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<artifactId>
xfg-dev-tech-infrastructure
</artifactId>
<dependencies>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</dependency>
</dependencies>
<build>
<finalName>
xfg-dev-tech-infrastructure
</finalName>
<plugins>
<!-- 编译plugin -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<configuration>
<source>
${java.version}
</source>
<target>
${java.version}
</target>
<compilerVersion>
${java.version}
</compilerVersion>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/cache/GuavaCache.java
0 → 100644
浏览文件 @
da249b1a
package
cn.bugstack.xfg.dev.tech.infrastructure.cache
;
public
class
GuavaCache
{
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录