-
Spring注解和接口
列举一些比较容易混淆的注解##配置@Configurable:对象管理@Configuration:配置@PropertySource:加载配置@ConfigurationProperties:单独使用不会管理(结合`Component`/`Configuration`/`EnableConfigurationProperties`使用)@EnableConfigurationProperties:配合`ConfigurationProperties`使用##初始化销毁@PostConstruct:初始化@PreDestroy:销毁##接口BeanNameAware:获取名称BeanFactoryAware:获取BeanFactoryApplicationContextAware:获取上下文ApplicationEvent/ApplicationListener:事件和监听##生命周期FactoryBean:创建BeanInitializingBean:初始化DisposableBean:销毁BeanPostProcessor:初始化BeanFactoryPostProcessor:工厂初始化(Bean生命周...
Spring 注解 接口 -
技术选型
很多时候有些技术需要用到再引入,不要为了用而用,这样只会增加项目的复杂度和维护成本。这里整理一些当下最时髦的玩意儿吧,持续更新,没有优先级安装字符长短排序,可以使用集群尽量使用。一个项目需要很多技术累计,一个优秀的项目必须每一步都要做到极致,大到整个技术选型,小到一张图片的压缩都会至关重要。###JavaJava基础>基础东西很多:GC、IO、JVM、多线程等等###基础框架ORM:JPA/MyBatis/HibernateSpringSpringMVCSpringBoot###微服务DubboSpringCloudSpringCloudAlibaba###服务器LinuxDebianCentOSUbuntu###数据库RedisNeo4jMySQLLuceneMongoDBElasticsearch>缓存、读写分离、分库分表、分布式事务###消息队列KafkaRabbitMQRocketMQ###注册中心NacosZookeeper###监控NacosDubboAdminSpringBootAdminSentinelDashboardPrometheus+GrafanaSprintBootMic...
架构 技术 选型 -
常用监控
在系统运行的时候监控是非常重要的,可以提前预支一些问题,最近也简单了解了一下常用的可视化监控组件。###Nacos这个作为SpringCloudAlibaba的注册中心,提供了一些简单的监控,主要查看服务和配置,但是dubbo服务并不详细。###SentinelDashboard作为Sentinel的可视化组件,只能单机部署,可以查看链路信息、配置限流,还可以看到流量的曲线图。默认提供的代码不能和Nacos配置动态关联,需要自己修改,不知道以后会不会进行优化。###DubboAdmin监控dubbo服务粒度很细,但是和SpringCloudAlibaba不能结合使用。###SpringBootAdmin通过SpringBoot端点结合turbine、zipkin可以监控SpringBoot很多指标。但是需要结合Hystrix使用。###链路监控Zipkin、Cat、Pinpoint、SkyWalking###Prometheus+Grafana这个我也只是网上见过,并没有搭建,但是基本上可以监控很多东西:系统、数据库、应用服务、K8S等等。但是监控一些常用指标,不过不能对服务进行治理。一般监控Java通过JM...
监控 -
SpringSecurity学习
今天重新学习了一下SpringSecurity,发现登陆成功跳转页面提示`405`,后来看了半天才发现成功跳转我用的请求转发`successForwardUrl`,请求转发地址是`GET`,登陆请求是`POST`,所以就有这个错误了。同样的其他请求转发也需要注意这个问题。今天用这个做了两个鉴权,一个基于`session`用来页面鉴权,一个基于`token`用来接口鉴权。代码:[https://gitee.com/acgist/demo/tree/master/security](https://gitee.com/acgist/demo/tree/master/security)不过感觉如果真的用来做接口鉴权,还是自己写拦截器好一点,因为接口还有很多东西需要处理的。数据格式校验、保存报文、验证有效很多需要验证的,所以感觉还是拦截器好用一点。最近发现Tomcat请求里面很多东西都可以通过线程ID和Map去实现信息传输。
SpringSecurity -
Spring Cloud Alibaba不能获取Nacos配置
之前学习SpringCloud还是几年前,以前Eureka注册中心现在不维护了,Zuul被Gateway代替了,不过看了一下还是阿里巴巴这套不错。不过搞了半天新版本居然获取不老Nacos配置,原来需要添加依赖:```javaorg.springframework.cloudspring-cloud-starter-bootstrap```这个依赖也是才出不久。##@NacosConfigurationProperties`@NacosConfigurationProperties`这个注解在SpringCloud环境下面也不能获得配置,需要配置`ext-config`。这个可能使用`nacos-config-spring-boot-starter`这个有效果,但是使用`spring-cloud-starter-alibaba-nacos-config`就没有效果,而且使用注解是`@NacoaPropertySource`。##dubbo`spring-cloud-starter-dubbo`不能使用dubboadmin管理服务##SentinelDashboardspringcloudalibaba使用nac...
SpringCloud Alibaba Nacos -
Markdown样式测试
#H1#H1##H2###H3####H4#####H5######H6[www.acgist.com](https://www.acgist.com)*斜体***加粗*****斜体加粗***标题内容![https://www.acgist.com/logo.png](https://www.acgist.com/logo.png)acgist>引用这是一段配置`markdown=true`这是`HTML`文本属性`target````java代码...```1.12.21.12.21.12.2*1*21.12.2|表头|表头||----|----||单元格|单元格||单元格|单元格|标题内容标题内容完成
Markdown -
Java学习路线(面试刷题)
我们的记忆力总是会随着时间慢慢忘记一些东西,就像是Java里面的引用一样,除了强引用其他的都可能慢慢忘记,只不过条件不一样罢了。所以学习和总结很重要,但是定期复习更加重要,所以不定时的看看,不仅仅能够巩固知识,也许还能够发现新的东西。##Java基础、进阶、全栈[https://github.com/CyC2018/CS-Notes](https://github.com/CyC2018/CS-Notes)[https://github.com/doocs/advanced-java](https://github.com/doocs/advanced-java)[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)##算法[https://github.com/labuladong/fucking-algorithm](https://github.com/labuladong/fucking-algorithm)[https://github.com/nonstriater/Learn-Algor...
Java 面试 学习路线 -
常见日志关闭
日志使用缓存系统关闭缓存里面的数据不能正常输出,需要我们手动关闭日志刷出缓存:##Log4j```javaLogManager.shutdown();```##Logback```javafinalLoggerContextcontext=(LoggerContext)LoggerFactory.getILoggerFactory();context.stop();```##SpringBoot```logging.level.root=OFF```
Logger -
sonatype登陆失败
怎么说呢,很久没有登陆了,然后今天升级JDK17提交了一个版本。先是证书过期了,搞了半天才发现证书过期了。然后发布时就是一直提示`401`。登陆网站一直提示密码账号密码错误,然后修改密码一直提示连接关闭。各种奇奇怪怪的提示,然后中午睡了一觉,起来发现居然啥问题没有了。估计应该是他们服务有问题。登陆失败:```Incorrectusername,passwordornopermissiontousetheNexusUserInterface.Tryagain.Pleaseloginbeforeattemptingfurtherrequests.```修改密码:```Thepasswordcouldnotbechangedbythecredentialsprovider.org.springframework.ldap.CommunicationException:connectionclosed;nestedexceptionisjavax.naming.CommunicationException:connectionclosed[Rootexceptionisjava.io.IOException:conn...
sonatype -
sonarqube JDK17启动失败
错误日志:```javawrapper|-->WrapperStartedasConsolewrapper|LaunchingaJVM...jvm1|Wrapper(Version3.2.3)http://wrapper.tanukisoftware.orgjvm1|Copyright1999-2006TanukiSoftware,Inc.AllRightsReserved.jvm1|jvm1|2021.09.1613:26:54INFOapp[][o.s.a.AppFileSystem]CleaningorcreatingtempdirectoryD:\develop\sonarqube-9.0.1.46107\tempjvm1|2021.09.1613:26:55INFOapp[][o.s.a.es.EsSettings]Elasticsearchlisteningon[HTTP:127.0.0.1:9001,TCP:127.0.0.1:1025]jvm1|2021.09.1613:26:55INFOapp[][o.s.a.ProcessLauncherImpl]Launchprocess[[key...
sonarqube JDK17 -
Maven打包gpg签名异常
错误原因:证书过期异常日志:```java[ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-gpg-plugin:3.0.1:sign(auto-build-sign)onprojectsnail.parent:Exitcode:2->[Help1]org.apache.maven.lifecycle.LifecycleExecutionException:Failedtoexecutegoalorg.apache.maven.plugins:maven-gpg-plugin:3.0.1:sign(auto-build-sign)onprojectsnail.parent:Exitcode:2atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:215)atorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)atorg.apache.ma...
Maven -
获取不到POST表单请求参数
POST请求,设置请求内容`application/x-www-form-urlencoded`,后台获取不到请求参数。原来调用`request.getInputStream()`后再调用`request.getParameter()`就不能获取参数了。本来是想做一个兼容获取参数的方法,所以需要先调用`request.getParameterNames()`判断是否有参数判断是否调用`request.getParameter()`,再通过`request.getInputStream()`获取其他请求数据。
POST -
Eclipse彻底删除插件
Eclipse通过Uninstall卸载后还有些东西没有彻底删除:1.`eclipse\plugins`里面是否还有插件2.`eclipse\configuration\org.eclipse.osgi`里面是否还有配置(含有`.delete`就是已经删除插件配置)如果不确定文件是否属于删除的插件时不建议自行修改
Eclipse -
SpringBoot Ajax跨域请求sessionId
最经做一个功能时发现Ajax跨域并不能上送sessionId,每次请求sessionId都不一样,就是sessionId改变了,所以研究了一下。解决办法如下:添加SpringBoot跨域配置:```@ConfigurationclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry.addMapping("/**").allowedOrigins("https://testjd.com:8080","https://testtaobao.com:8080").allowCredentials(true).allowedHeaders("*").allowedMethods("*").maxAge(1800);}}```Ajax添加Cookie配置withCredentials:```$.ajax({"xhrFields":{withCredentials:true},url:"https://testjd.com:8080",success:functio...
SpringBoot Ajax sessionId -
获取请求数据
做了一个获取请求数据的页面,发送请求到[https://www.acgist.com/demo/request](https://www.acgist.com/demo/request/print),然后访问[https://www.acgist.com/demo/request/print](https://www.acgist.com/demo/request/print),就可以拿到上次请求的数据了。主要包含数据:请求方法、请求头还有请求数据。
HTTP -
Java访问错误
```Thepackageorg.eclipse.core.runtimeisaccessiblefrommorethanonemodule:org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.preferences,org.eclipse.equinox.registryThepackageorg.eclipse.core.runtimeisaccessiblefrommorethanonemodule:org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.preferences,org.eclipse.equinox.registryIStatuscannotberesolvedtoatypeMultiStatuscannot...
Java -
Eclipse错误
今天升级了`Eclipse2021-06(4.20.0)`,默认就支持JDK16了,但是启动后发现提示错误:```javaCouldnotinitializeclassorg.apache.maven.plugin.war.util.WebappStructureSerializer```解决办法在Eclipse配置`eclipse.ini`中添加`--illegal-access=permit`重启就可以了。参考文章:[https://www.5axxw.com/questions/content/tts8j7](https://www.5axxw.com/questions/content/tts8j7)
Eclipse -
从零开始到下载世界:Tracker服务器和DHT网络
##如何获取下载客户端(Peer)将下载同一个资源的客户端视为Peer,开始下载的时候第一个任务就是获取Peer,越多越好,越优质越好。这时我们就需要从Tracker服务器和DHT网络中获取其他Peer。##什么是Tracker服务器Tracker服务器可以使用UDP/HTTP协议通过资源特征码(InfoHash)获取Peer的地址和端口。Tracker服务器很多时候都连接不上,所以使用优质的Tracker非常重要。[HTTPTracker](https://wiki.theory.org/index.php/BitTorrentSpecification)[代码实现](https://gitee.com/acgist/snail/blob/master/snail/src/main/java/com/acgist/snail/net/torrent/tracker/HttpTrackerSession.java)[UDPTracker](http://www.bittorrent.org/beps/bep_0015.html)[代码实现](https://gitee.com/acgist/snail/blo...
Tracker DHT -
从零开始到下载世界:种子文件
##种子文件作用种子文件主要用来描述文件信息:文件名称、大小、校验,还有如何获取下载客户端的Tracker服务器[从零开始到下载世界](https://www.acgist.com/article/588.html)
种子文件 -
从零开始到下载世界:BT入门
##什么是BT?简单一点来说就是P2P文件传输协议,就是用户和用户之间进行文件分享。用户下载的同时会向其他用户上传已经下载的数据,所以和FTP、HTTP这些协议相比,下载(分享)越多下载越快。详细参见:[BitTorrent](https://baike.baidu.com/item/BitTorrent/142795)##如何实现BT协议?BT协议里面其实包含很多协议,这些协议你可以在[BitTorrent.org](http://bittorrent.org/beps/bep_0000.html)查看。这里面有非常多的协议,这些协议有不同的状态:最终、接收、草稿、废弃。当然这些协议不是需要全部实现,可以选择实现必须的协议即可,还可以自定义协议。查看[蜗牛实现协议](https://gitee.com/acgist/snail/blob/master/docs/PROTOCOL.md)后面基本上会按照[BitTorrent.org](http://bittorrent.org/beps/bep_0000.html)里面的协议顺序进行逐个讲解如何实现BT协议。[从零开始到下载世界](https://www.a...
BT BitTorrent