通过类路径加载资源
- ip2region文件位置:
resource/ip2region/ip2region.xdb
- 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lizz</groupId>
<artifactId>read-resource</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>read-resource</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<ip2region.version>2.6.5</ip2region.version>
</properties>
<dependencies>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>${ip2region.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.lionsoul.ip2region.xdb.Searcher;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author lizz
* @create 2022-08-22 20:38
*/
public class IPUtils {
public static String getRegion(String ip){
// 1、创建 searcher 对象
String dbPath = getDbPath();
if(StringUtils.isEmpty(ip)){
return null;
}
Searcher searcher = null;
try {
searcher = Searcher.newWithFileOnly(dbPath);
// 2、查询
long sTime = System.nanoTime();
String region = searcher.search(ip);
long cost = TimeUnit.NANOSECONDS.toMicros((long) (System.nanoTime() - sTime));
System.out.printf("{region: %s, ioCount: %d, took: %d μs}\n", region, searcher.getIOCount(), cost);
return region;
} catch (Exception e) {
System.out.printf("failed to create searcher with `%s`: %s\n", dbPath, e);
System.out.printf("failed to search(%s): %s\n", ip, e);
return null;
}finally {
// 3、关闭资源
try {
searcher.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String getDbPath(){
try {
String dbPath = IPUtils.class.getResource("/ip2region/ip2region.xdb").getPath();
File file = new File(dbPath);
if (!file.exists()) {
String tmpDir = System.getProperties().getProperty("java.io.tmpdir");
dbPath = tmpDir + File.separator + "ip2region.xdb";
file = new File(dbPath);
if (!file.exists() || (System.currentTimeMillis() - file.lastModified() > 86400000L)) {
try {
InputStream inputStream = new ClassPathResource("ip2region/ip2region.xdb").getInputStream();
IOUtils.copy(inputStream, new FileOutputStream(file));
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
return file.getPath();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
import com.lizz.readresource.utils.IPUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ReadResourceApplication {
public static void main(String[] args) {
SpringApplication.run(ReadResourceApplication.class, args);
String[] ips = {"112.10.180.96","127.0.0.1","168.63.123.39","185.7.214.117"};
for (String ip : ips) {
IPUtils.getRegion(ip);
}
}
}
直接将资源放到jar包目录
ip2region源码地址
ip2region
发表评论
取消回复