diff --git a/pom.xml b/pom.xml
index eb1794a..e192a6b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,8 @@
zy-shorturl-core
zy-shorturl-spring-boot-starter
zy-shorturl-store
- zu-shorturl-web
+ zy-shorturl-server
+ zu-shorturl-web-spring-boot-starter
diff --git a/zu-shorturl-web/pom.xml b/zu-shorturl-web-spring-boot-starter/pom.xml
similarity index 70%
rename from zu-shorturl-web/pom.xml
rename to zu-shorturl-web-spring-boot-starter/pom.xml
index 567901f..54256d9 100644
--- a/zu-shorturl-web/pom.xml
+++ b/zu-shorturl-web-spring-boot-starter/pom.xml
@@ -9,7 +9,7 @@
4.0.0
- zu-shorturl-web
+ zu-shorturl-web-spring-boot-starter
8
@@ -17,38 +17,29 @@
-
-
- com.google.guava
- guava
- 31.1-jre
-
-
-
-
- cn.zzzykj
- zy-short-url-spring-boot-starter
- 1.0-SNAPSHOT
-
-
-
+
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-configuration-processor
+
+
- org.springframework.boot
- spring-boot-autoconfigure
+ cn.zzzykj
+ zy-short-url-spring-boot-starter
+ 1.0-SNAPSHOT
org.projectlombok
lombok
+ true
+ compile
diff --git a/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/ShortUrlWebAutoConfiguration.java b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/ShortUrlWebAutoConfiguration.java
new file mode 100644
index 0000000..a631a4b
--- /dev/null
+++ b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/ShortUrlWebAutoConfiguration.java
@@ -0,0 +1,18 @@
+package cn.shorturl.web.boot.starter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ZhuoQinghui
+ * @version 1.0.0
+ * Create By 2022/7/31 19:41
+ */
+@Slf4j
+@Configuration
+@ComponentScan("cn.shorturl.web.boot.starter.controller")
+@EnableConfigurationProperties
+public class ShortUrlWebAutoConfiguration {
+}
diff --git a/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ShortUrlController.java b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ShortUrlController.java
new file mode 100644
index 0000000..964a306
--- /dev/null
+++ b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ShortUrlController.java
@@ -0,0 +1,39 @@
+package cn.shorturl.web.boot.starter.controller;
+
+import cn.shorturl.core.ShortUrl;
+import cn.shorturl.store.ShortUrlStore;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @author ZhuoQinghui
+ * @version 1.0.0
+ * Create By 2022/7/31 16:41
+ */
+@Slf4j
+@RestController
+@ConditionalOnProperty(prefix = "shorturl.api", name = "enable")
+@RequestMapping("${shorturl.api.url-suffix}")
+public class ShortUrlController {
+
+ @Resource
+ private ShortUrlStore store;
+
+ @GetMapping("${shorturl.api.add}")
+ public ShortUrl add(@RequestParam String url, @RequestParam(required = false) Date expire) {
+ return store.add(url, expire);
+ }
+
+ @GetMapping("${shorturl.api.get}")
+ public ShortUrl get(@RequestParam String hash) {
+ return store.get(hash);
+ }
+
+}
diff --git a/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ToController.java b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ToController.java
new file mode 100644
index 0000000..d242df2
--- /dev/null
+++ b/zu-shorturl-web-spring-boot-starter/src/main/java/cn/shorturl/web/boot/starter/controller/ToController.java
@@ -0,0 +1,41 @@
+package cn.shorturl.web.boot.starter.controller;
+
+import cn.shorturl.core.ShortUrl;
+import cn.shorturl.store.ShortUrlStore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author ZhuoQinghui
+ * @version 1.0.0
+ * Create By 2022/7/31 18:57
+ */
+@Controller
+@ConditionalOnProperty(prefix = "shorturl.redirect", name = "enable")
+@RequestMapping("${shorturl.redirect.url-suffix}")
+public class ToController {
+
+ @Resource
+ private ShortUrlStore store;
+
+ @RequestMapping("/{hash}")
+ public void to(@PathVariable String hash, HttpServletResponse response) {
+ ShortUrl url = store.get(hash);
+ if (url == null) {
+ throw new IllegalArgumentException("hash not found");
+ }
+ try {
+ response.sendRedirect(url.getUrl());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/zu-shorturl-web-spring-boot-starter/src/main/resources/META-INF/spring.factories b/zu-shorturl-web-spring-boot-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..83ae3b7
--- /dev/null
+++ b/zu-shorturl-web-spring-boot-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ cn.shorturl.web.boot.starter.ShortUrlWebAutoConfiguration
\ No newline at end of file
diff --git a/zu-shorturl-web/src/main/java/cn/shorturl/web/controller/ShortUrlController.java b/zu-shorturl-web/src/main/java/cn/shorturl/web/controller/ShortUrlController.java
deleted file mode 100644
index 4bf3104..0000000
--- a/zu-shorturl-web/src/main/java/cn/shorturl/web/controller/ShortUrlController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.shorturl.web.controller;
-
-import cn.shorturl.core.ShortUrlConfig;
-import cn.shorturl.store.ShortUrlStore;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-
-/**
- * @author ZhuoQinghui
- * @version 1.0.0
- * Create By 2022/7/31 16:41
- */
-@Slf4j
-@RestController
-@RequestMapping("/su")
-public class ShortUrlController {
-
- @Resource
- private ShortUrlStore store;
-
- @PostConstruct
- public void init() {
- log.info("store: {}", store);
- String url = "https://www.baidu.com";
- String hash = store.hash(url);
- log.info("hash: {}", hash);
- store.add(url);
- }
-
- @GetMapping("/gen")
- public String gen() {
- return "";
- }
-
-}
diff --git a/zu-shorturl-web/src/main/resources/application.yml b/zu-shorturl-web/src/main/resources/application.yml
deleted file mode 100644
index 4bb0b58..0000000
--- a/zu-shorturl-web/src/main/resources/application.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-server:
- port: 8090
-
-shorturl:
- store:
- retryMax: 6
- store-type: redis
\ No newline at end of file
diff --git a/zy-shorturl-server/pom.xml b/zy-shorturl-server/pom.xml
new file mode 100644
index 0000000..71aae4f
--- /dev/null
+++ b/zy-shorturl-server/pom.xml
@@ -0,0 +1,78 @@
+
+
+
+ zy-short-url
+ cn.zzzykj
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ zy-shorturl-server
+
+
+ 8
+ 8
+
+
+
+
+
+ com.google.guava
+ guava
+ 31.1-jre
+
+
+
+
+ cn.zzzykj
+ zu-shorturl-web-spring-boot-starter
+ 1.0-SNAPSHOT
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis-reactive
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+ compile
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zu-shorturl-web/src/main/java/cn/shorturl/web/Application.java b/zy-shorturl-server/src/main/java/cn/shorturl/server/Application.java
similarity index 92%
rename from zu-shorturl-web/src/main/java/cn/shorturl/web/Application.java
rename to zy-shorturl-server/src/main/java/cn/shorturl/server/Application.java
index 01f1d46..f03bb6e 100644
--- a/zu-shorturl-web/src/main/java/cn/shorturl/web/Application.java
+++ b/zy-shorturl-server/src/main/java/cn/shorturl/server/Application.java
@@ -1,8 +1,9 @@
-package cn.shorturl.web;
+package cn.shorturl.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+
/**
* @author ZhuoQinghui
* @version 1.0.0
diff --git a/zy-shorturl-server/src/main/resources/application.yml b/zy-shorturl-server/src/main/resources/application.yml
new file mode 100644
index 0000000..20a4dd1
--- /dev/null
+++ b/zy-shorturl-server/src/main/resources/application.yml
@@ -0,0 +1,24 @@
+server:
+ port: 8090
+
+spring:
+ redis:
+ host: '192.168.1.202'
+ port: 6379
+ timeout: 60000
+ database: 12
+ password: '123456'
+
+
+shorturl:
+ redirect:
+ enable: true
+ url-suffix: '/to'
+ api:
+ enable: true
+ url-suffix: '/api'
+ add: '/add'
+ get: '/get'
+ store:
+ retryMax: 6
+ store-type: redis
\ No newline at end of file
diff --git a/zy-shorturl-spring-boot-starter/src/main/java/cn/shorturl/boot/starter/ShortUrlAutoConfiguration.java b/zy-shorturl-spring-boot-starter/src/main/java/cn/shorturl/boot/starter/ShortUrlAutoConfiguration.java
index fe06697..7bbf8c9 100644
--- a/zy-shorturl-spring-boot-starter/src/main/java/cn/shorturl/boot/starter/ShortUrlAutoConfiguration.java
+++ b/zy-shorturl-spring-boot-starter/src/main/java/cn/shorturl/boot/starter/ShortUrlAutoConfiguration.java
@@ -13,12 +13,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.StringRedisTemplate;
-
-import javax.annotation.PostConstruct;
/**
* @author ZhuoQinghui