官方网址
https://www.consul.io/
Github地址:
https://github.com/hashicorp/consul
1、下载二进制安装包
以
spring-clou-commons
最新版’3.0.1-SNAPSHOT’为示例
刚下载的sanpshot版本使用IDEA打开后,存在两个问题:
3.0.1-SNAPSHOT
找不到项目不能正常的被识别为java项目的根据原因是parent找不到
我本地的maven setting.xml已经存在如下配置了:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>spring</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo.spring.io/release/</url>
</mirror>
</mirrors>
因为SNAPSHOT类型的项目没有正式发布,所以正常情况下,中央仓库是没有这些包的。那么需要我们自已编译这些包或者从其它地方下载。如果是spring boot项目,可以配置如下仓库进行相关pom依赖下载:
<profiles>
<profile>
<id>spring</id>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!--以下配置可选-->
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
上面配置是spring 官方提供的配置,一般在SNAPSHOT项目中的pom中都存在此配置。
- mvnw install -P spring
或者
- mvn install -P spring
上面中有三个比较关键信息http://repo.spring.io/release
项目中有一个mvnw文件,此命令可以直接执行
荐的pom.xml文件,已经自带spring 仓库相关配置
执行mvnw install -P spring
报错
现像是我明明要的是SNAPSHOT版本的依赖,怎么会跑去http://repo.spring.io/release/org/springframework/cloud/spring-cloud-build/3.0.1-SNAPSHOT/maven-metadata.xml
下载呢?这是release的路径,我们禁用了SNAOSHOT版本,况且realease下一般没有SNAPSHOT版本。
是什么原因呢?
这就是上面说的那个小坑。我本地的maven有如下配置:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>spring</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo.spring.io/release/</url>
</mirror>
</mirrors>
请注意:
此处表所有的maven依赖都会进入http://repo.spring.io/release
查找。因此才会出现上面的错误。注释掉此mirror配置后,再执行mvnw install -P spring
命令:
各个依赖可以正常下载!!!
何实现Java的优雅停机呢?在linux直接kill -9 实在是太暴力了,所以我们常用kill -15 或者kill。因为kill 默认参数是-15。这样关闭java进程会收到通知。JVM再收到通知后会调用一个钩子函数,这样我们就可以实现一个钩子,实现在进程关闭之前进行相关的清理操作,比如关闭数据库链接,注册清理等。
很简单,只要实现Runnable
接口即可
class DemoHook extends Thread{
@Override
public void run(){
System.out.println("stopping ...");
System.out.println("cleaning ...");
System.out.println("down ...");
}
}
很简单,一行代码即可
Runtime.getRuntime().addShutdownHook(new DemoHook());
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new DemoHook());
System.out.println("running...");
for (;;){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Java9 在java.util.concurrent.
包中新增了Flow
这个接口。通过Flow API我们仅仅使用JDK就能够搭建响应式应用程序,而不需要其他额外的类库,如RxJava或Project Reactor。并且Flow API完全遵循Reactive Stream相关规范。其接口抽象如下:
Flow.Publisher
定义了生产数据和控制事件的方法。Flow.Subscriber
定义了消费数据和事件的方法。Flow.Subscription
定义了链接Publisher和Subscriber的方法。Flow.Processor
定义了转换Publisher到Subscriber的方法目前,虽然Java9中没有很多FlowAPI的实现类可供我们使用,仅有SubmissionPublisher
是Flow.Publisher
的实现。但是依靠这些接口第三方可以提供的响应式编程得到了规范和统一,比如从JDBC driver到RabbitMQ的响应式实现。
关于什么是响应式编程请自行百度或者Google,本文末尾有一些参考链接,有部分是关于响应式的。
package java.util.concurrent;
public final class Flow {
// Flow自身不可实例化
private Flow() {} //uninstantiable
//发布者就是一个函数式接口
@FunctionalInterface
public static interface Publisher<T> {
public void subscribe(Subscriber<? super T> subscriber);
}
//订阅者接口定义
public static interface Subscriber<T> {
//发起订阅事件,此时发布者会将Subscription传递过来
public void onSubscribe(Subscription subscription);
//正常元素消费事件
public void onNext(T item);
//消费异常事件
public void onError(Throwable throwable);
//消费完成事件
public void onComplete();
}
//这个单词没有准确的翻译,我理解为“合约”,也是一把订阅者与消费者进行沟通的钥匙。
public static interface Subscription {
//向发布者请求元素,因为是消费者主动发起的,因此可以实现“背压”效果。
public void request(long n);
//主动取消订阅
public void cancel();
}
//Processor处理器,同时实现了发者与消费者接口 ,可以串连起链条形式。实现
public static interface Processor<T,R> extends Subscriber<T>, Publisher<R> {
}
//默认Subscription缓存大小
static final int DEFAULT_BUFFER_SIZE = 256;
public static int defaultBufferSize() {
return DEFAULT_BUFFER_SIZE;
}
}
本文章主要是收集Github或者码云等上面优秀开源项目,方便查阅。
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。