一、环境搭建 安装好JDK环境 到groovy官网下载groovySDK,解压到合适位置 groovy官网:http://www.groovy-lang.org/ 安装后的文件如上图所示,我们需要关注的是bin和doc文件夹下的内容,其它文件夹下是一些配置和groovy自带的一些jar包 配置groovy环境变量 二、与Java的不同之处 1、默认 imports 所有这些包和类都是默认导入的,您不必使用显式import语句来使用它们:
|
1 2 3 4 5 6 7 8 |
java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger java.net.* java.util.* groovy.lang.* groovy.util.* |
2、运行时分派 在Groovy中,将在运行时选择将被调用的方法。 这称为运行时分派或Multi-methods。 这意味着将基于运行时参数的类型来选择方法。 在Java中,则是根据声明的类型,在编译时选择方法。 下面的代码,以Java代码编写,可以在Java和Groovy中编译,但它的行为会有所不同:
|
1 2 3 4 5 6 7 8 |
int method(String arg) { return 1; } int method(Object arg) { return 2; } Object o = "Object"; int result = method(o); |
在Java中, 您将得到:2 而在Groovy中:1 这是因为Java将使用静态信息类型,即o被声明为Object,而Groovy将在运行时选择该方法被实际调用时。 因为它是用String调用的,所以调用String版本。 3、数组初始化 在Groovy中,{…}块是为闭包而保留的。 这意味着您不能使用以下语法创建数组:
|
1 |
int [] array = {1,2,3} |
你必须使用:
|
1 |
int [] array = [1,2,3] |
4、自动资源管理块 Groovy不支持Java 7中的ARM(自动资源管理)块。 相反,Groovy提供了依赖闭包的各种方法,它们具有相同的效果,同时更加方便。 例如:
|
1 2 3 4 5 6 7 8 9 10 11 |
Path file = Paths.get("/path/to/file"); Charset charset = Charset.forName("UTF-8"); try (BufferedReader reader = Files.newBufferedReader(file, charset)) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } |
可以这样写:
|
1 2 3 |
new File('/path/to/file').eachLine('UTF-8') { println it } |
或者,如果你想要一个更接近Java的版本:
|
1 2 3 4 5 |
new File('/path/to/file').withReader('UTF-8') { reader -> reader.eachLine { println it } } |
5、Lambdas Java 8支持lambdas和方法引用:
|
1 2 |
Runnable run = () -> System.out.println("Run"); list.forEach(System.out::println); |
Java 8 lambdas可以或多或少被认为是匿名内部类。 Groovy不支持该语法,但是可以使用闭包:
|
1 2 |
Runnable run = { println 'run' } list.each { println it } // or list.each(this.&println) |
6、GStrings 由于双引号字符串字面量被解释为GString,Groovy将在GString和String之间自动转换 Groovy中的单引号用于String,双引号结果是String或GString,取决于文字中是否有插值。
|
1 2 3 |
assert 'c'.getClass()==String assert "c".getClass()==String assert "c${1}".getClass() in GString |
只有在赋给char类型的变量时,Groovy会自动将单字符String转换为char。 当调用类型为char的参数的方法时,我们需要显式转换或确保该值已预先转换。
|
1 2 3 4 5 6 7 8 9 |
char a='a' assert Character.digit(a, 16)==10 : 'But Groovy does boxing' assert Character.digit((char) 'a', 16)==10 try { assert Character.digit('a', 16)==10 assert false: 'Need explicit cast' } catch(MissingMethodException e) { } |
Groovy支持两种类型的转换,在转换为char的情况下,在转换multi-char 时存在微妙的差别。 Groovy风格的转换是更宽松的,将采取第一个字符,而C风格的转换将失败,异常。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// for single char strings, both are the same assert ((char) "c").class==Character assert ("c" as char).class==Character // for multi char strings they are not try { ((char) 'cx') == 'c' assert false: 'will fail - not castable' } catch(GroovyCastException e) { } assert ('cx' as char) == 'c' assert 'cx'.asType(char) == 'c' |
7、原始和封装 因为Groovy使用Objects来做每一件事,它对原始的引用自动包装。 因此,它不遵循Java的扩展优先于装箱。 这里有一个使用int的例子
|
1 2 3 4 5 6 7 8 9 10 11 12 |
int i m(i) //这是Java将调用的方法,因为扩展优先于装箱。 void m(long l) { println "in m(long)" } //这是Groovy实际调用的方法,因为所有的基本引用都使用它们的包装类。 void m(Integer i) { println "in m(Integer)" } |
8、==的行为 在Java中==表示对象的原始类型或标识的相等性。 在Groovy ==翻译为a.compareTo(b)== 0,如果他们是可比较的,否则a.equals(b)。 如果要检查身份,有is方法,例如a.is(b) 三、基础语法 1、动态类型 Groovy定义变量时:可以用Groovy风格的def声明,不指定类型;也可以兼容Java风格,指定变量类型;甚至还可以省略def或类型。
|
1 2 3 |
def t1 = 't1' String t2 = 't2' t3 = 't3' |
[…]
View Details|
1 2 3 4 5 6 |
//使用File获取resources里面资源文件的相对路径 若文件名称为中文可能会报文件不存在 File file = new File(this.getClass().getResource("/province-city.josn").getPath()); //使用inputStream InputStream inputStream = this.getClass().getResourceAsStream("/province-city.json"); |
from:https://www.cnblogs.com/yang-xiansen/p/13529568.html
View DetailsDocker提供了重新启动策略 来控制容器在退出时或Docker重新启动时是否自动启动。重新启动策略可确保以正确的顺序启动链接的容器。Docker建议您使用重新启动策略,并避免使用进程管理器来启动容器。 重新启动策略--live-restore与dockerd 命令的标志不同。--live-restore尽管网络和用户输入中断,但使用允许您在Docker升级期间保持容器运行。 使用重启策略 要为容器配置重新启动策略,请--restart在使用该docker run命令时使用该标志。--restart标志的值可以是以下任何一种: 旗 描述 no 不要自动重启容器。(默认) on-failure 如果容器由于错误而退出,则重新启动容器,该错误表现为非零退出代码。 always 如果容器停止,请务必重启容器。如果手动停止,则仅在Docker守护程序重新启动或手动重新启动容器本身时才重新启动。(参见重启政策详情中列出的第二个项目) unless-stopped 类似于always,除了当容器停止(手动或其他方式)时,即使在Docker守护程序重新启动后也不会重新启动容器。 以下示例启动Redis容器并将其配置为始终重新启动,除非明确停止或重新启动Docker。
|
1 |
$ docker run -dit --restart unless-stopped redis |
重启政策详情 使用重启策略时请记住以下几点: 重启策略仅在容器成功启动后生效。在这种情况下,成功启动意味着容器启动至少10秒并且Docker已开始监视它。这可以防止根本不启动的容器进入重启循环。 如果手动停止容器,则会忽略其重新启动策略,直到Docker守护程序重新启动或手动重新启动容器。这是防止重启循环的另一种尝试。 重新启动策略仅适用于容器。群组服务的重新启动策略配置不同。请参阅与服务重新启动相关的 标志。 如果run时没有添加restart 可以通过update命令追加 docker update --restart=always web 1、先后台启动容器未加restart参数 2、docker ps 查看了当前运行的容器 3、重启docker 服务 4、再次docker ps 查看当前运行的容器,发现容器并没有运行 5、利用 update 设置 restart=always 6、重启docker 服务 7、再次docker ps 查看当前运行的容器,此时发现已经自动启动容器 ——————— 使用流程管理器 如果重新启动策略不适合您的需要,例如当Docker之外的进程依赖Docker容器时,您可以使用流程管理器,例如 upstart, systemd或supervisor。 警告:不要尝试将Docker重新启动策略与主机级进程管理器结合使用,因为这会产生冲突。 要使用进程管理器,请将其配置为使用您通常用于手动启动容器的相同docker start或docker service命令来启动容器或服务。有关更多详细信息,请参阅特定流程管理器的文档。 在容器内使用进程管理器 进程管理器也可以在容器内运行,以检查进程是否正在运行,如果没有则启动/重启进程 官方介绍在此,以上内容引用官网内容 https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-process-manager from:https://www.cnblogs.com/wei9593/p/11192908.html
View Details重新Rubuild Project 停止在 运行时错误: 试着的解决方式 运行clean 、install 、运行。 运行正常!! 解决方法 删除 .idea ,重新打开项目 ,重新建立工程Rebuild Project ,信息如下: java: /E:/JPADemo/src/main/java/com/example/jpademo/JpaDemoApplication.java使用了未经检查或不安全的操作。 要取消这种告警信息,可在 public class JpaDemoApplication 类面前加@SuppressWarnings("unchecked") 原因:JAVA是一门安全性比较高的语言,它在编译之类要进行类型等一系列的检查。如果你使用了注解就可以告诉编译器不用检查,这样子就可以避过编译时期间的安全检查,这样子的效率会提高 。但同时 安全性就大打折扣了。 但是运行正常!! from:https://www.cnblogs.com/wfy680/p/15014376.html
View Details使用IntelliJ IDEA开发groovy,创建一个项目进入到这个界面: 如果Groovy. library是no. library select 那就点击右侧的create按钮,选择你安装的groovy目录就可以, 如果IntelliJ IDEA 左侧没有Groovy选项的话那就安装groovy插件, 新建的groovy项目是这样的: 会发现并不是像我们Android 在studio下创建项目一样有一个默认的MainActivity,groovy是没有的,那么从事编程开发的入门都是从hello world开始的,那么现在创建一个hello.groovy文件
|
1 2 3 4 5 6 7 8 9 |
class Hello { public static void main(String[] args){ print("hello world groovy") } } |
这是我们创建的第一个类Hello.groovy 从上面的代码就可以提现出groovy是完全支持Java的 而且更方便的是我们在控制台输入一句话 直接使用println()方法就行,相当于Java中的静态导包功能. 还有更神奇的写法: 是不是groovy很强大 这个写法和上面的Java中的写法结果是一样的.如果想弄懂gradle 构建是有必须去学习下. from:https://blog.csdn.net/coderinchina/article/details/89600861
View Details0、病因描写 clone 原有的项目(新建的项目一般不会有) IntelliJ IDEA 关联了后缀为groovy的文件但是没有配置Groovy的library。 1、病因一之解决方法 病因:本项目不需要用的Groovy但是关联了groovy了文件 方子:那直接去掉后缀为groovy的关联即可 结果:良好,网上基本都是这种方子 如图:去掉红框部分并apply 2、病因二之解决之法 病因:项目需要groovy的library。 方子:那就是配置groovy的library咯。 步骤: ①、下载groovy library ②、解压(选一个中意的目录,最好目录路径是全英文的) ③、配置groovy library:File —>Project Structure —> Modules —> Groovy —> Add Groovy Support —> 选择 Groovy library 最后 apply就OK了。 如图: 快捷配置入口:如果IDEA有如下提示就最好了–方便。直接点击 Configuration Groovy SDK 即可。 from:https://www.2cto.com/kf/201803/732193.html
View DetailsNuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages 修改方法:
|
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\"/> </packageSources> <config> <add key="globalPackagesFolder" value="D:\Nuget\.nuget\packages" /> </config> </configuration> |
from:https://www.cnblogs.com/sword88/p/11490304.html
View Detailsspringboot pom.xml加入依赖
|
1 2 3 |
org.springframework.boot spring-boot-starter-data-mongodb 2.1.6.RELEASE |
application.yml加入连接信息 mapper编写
|
1 2 |
public interface BusinessLogRecordMapper extends MongoRepository<businesslogrecord,string> { } |
Application启动添加注解
|
1 |
@EnableMongoRepositories(basePackages = {"com.etc.mapper"}) |
application.yml配置,这里之前碰到一个坑,mongodb的配置没有写host和port属性,只写了database和uri,这种方式在无密码验证的情况下,可以连接mongodb。但是在mongodb设置了密码登录后,就无法连接,一直提示 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert 这里我们说下,application.yml关于mongodb的两种配置 第一种,yml方式,注意这里的host port username password database,每个属性都要配置。
|
1 2 3 4 5 6 7 8 |
spring: data: mongodb: host: 192.168.11.121 port: 27017 username: aroot password: 999999 database: udb |
第二种,uri方式
|
1 2 3 4 |
spring: data: mongodb: uri: mongodb://aroot:999999@192.168.11.121:27017/udb |
之前就是配了如下的参数,导致一直出错,还以为是mongodb的用户权限配置出错导致,原来是配置文件出错,报错信息 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert
|
1 2 3 4 5 6 7 |
spring: data: mongodb: database: udb uri: mongodb://192.168.11.111:27017 username: aroot password: 999999 |
from:https://www.it610.com/article/1283088113266081792.htm
View Details前置条件: 已经安装好docker 1.查找镜像(有2种方式) ①登录rabbitmq官网找到docker镜像,选择想要的镜像的tag https://www.rabbitmq.com/download.html https://hub.docker.com/_/rabbitmq 如果需要访问web管理页面,就选择tag为management的 ps:带有alpine的是用最小linux镜像构建的,体积最小可以达5M初学者不建议这么折腾,而且 Alpine Linux使用了muslmusl实现的DNS服务不会使用resolv.conf文件中的search和domain两个配置,通过DNS来进行服务发现时需要注意。,带有-management的是带有web控制台 ②直接用docker search 搜索,默认下载标签为latest的镜像(无法打开web管理页面)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[testhadoop@sz-145-centos101 ~]$ sudo docker search rabbitmq NAME DESCRIPTION STARS OFFICIAL AUTOMATED rabbitmq RabbitMQ is an open source multi-protocol ... 2691 [OK] bitnami/rabbitmq Bitnami Docker Image for RabbitMQ 30 [OK] tutum/rabbitmq Base docker image to run a RabbitMQ server 19 frodenas/rabbitmq A Docker Image for RabbitMQ 12 [OK] kbudde/rabbitmq-exporter rabbitmq_exporter for prometheus 11 [OK] arm32v7/rabbitmq RabbitMQ is an open source multi-protocol ... 7 cyrilix/rabbitmq-mqtt RabbitMQ MQTT Adapter 7 [OK] gonkulatorlabs/rabbitmq DEPRECATED: See maryville/rabbitmq 5 [OK] aweber/rabbitmq-autocluster RabbitMQ with the Autocluster Plugin 4 pivotalrabbitmq/rabbitmq-autocluster RabbitMQ with the rabbitmq-autocluster plu... 3 pivotalrabbitmq/rabbitmq-server-buildenv Image used to build and test RabbitMQ serv... 3 authentise/rabbitmq A RabbitMQ image that will run a bash scri... 2 [OK] deadtrickster/rabbitmq_prometheus RabbitMQ + Prometheus RabbitMQ Exporter pl... 2 henrylv206/rabbitmq-autocluster RabbitMQ Cluster 2 [OK] riftbit/rabbitmq3 RabbitMQ 3.x Container based on Alpine Lin... 1 |
ps:如果是普通用户登录,需要sudo,不然会提示错误
|
1 2 |
[testhadoop@sz-145-centos101 ~]$ docker search rabbitmq Get http:///var/run/docker.sock/v1.19/images/search?term=rabbitmq: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS? |
2.下载镜像(有时候网络问题超时,多尝试几次即可。我这里选择的是可以访问web管理界面的tag)
|
1 |
sudo docker pull rabbitmq:management |
3.创建容器并运行(15672是管理界面的端口,5672是服务的端口。这里顺便将管理系统的用户名和密码设置为admin admin)
|
1 |
docker run -dit --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management |
from:https://www.cnblogs.com/yy-cola/p/11089800.html
View Details