据我所知,FTP中的主动和被动模式改变了从客户端向服务器发送命令和数据的端口,这在防火墙方面很有用.我认为我也说得对,SFTP没有相同的概念 - 但我不清楚SFTP协议的细微差别使得模仿FTP中存在的相同模式变得不必要/不可取.
我想构造一个JSON对象并将内容写入文件。
原来我的灵感来自于这和尝试:
def data = [
a:"test: ${myVar}"
]
writeJSON(file: 'message1.json', json: data)
Run Code Online (Sandbox Code Playgroud)
但这失败了:
无法为WriteJSONStep实例化{file = message1.json,json = {a = test}}(文件:字符串,json:JSON {},漂亮?:int):java.lang.UnsupportedOperationException:必须在实现中指定$ class net.sf.json.JSON的接口
所以接下来我尝试了:
def data = readJSON text: '{}'
data.a = "test: ${myVar}"
writeJSON(file: 'message1.json', json: data, pretty: 4)
Run Code Online (Sandbox Code Playgroud)
现在构建通过了,但是文件的内容如下所示:
{
"a": {
"bytes": [
114,
101,
108,
101,
97,
115,
101
50
],
"strings": [
"test: ",
""
],
"valueCount": 1,
"values": ["v1.0.2"]
}
}
Run Code Online (Sandbox Code Playgroud)
而我的意图是 {"a": "test: v1.0.2"}
我的最终目标是我想动态构造一个JSON对象,使用一些动态数据设置一些属性,然后编写JSON文件。
是否有一些语法可用于将值分配为字符串,而不是某些字节。
我有一个 spring boot mavel 多模块项目。
如果 spring boot 模块依赖于模块,A
并且在模块的src/main/resources
文件夹中A
有一个属性文件或其他一些我想捆绑在最终 spring boot 应用程序中的资源,我该如何实现这一点。
目前,如果我jar -tf
在模块 A JAR 上运行,它包含以下文件:
jar -tf module-a/target/module-a-0.0.1-SNAPSHOT.jar | grep changelog
db/changelog/
db/changelog/db.changelog-master.yaml
Run Code Online (Sandbox Code Playgroud)
然而:
jar -tf boot-module/target/boot-module-0.0.1-SNAPSHOT.jar | grep changelog | wc -l
0
Run Code Online (Sandbox Code Playgroud)
提前感谢您的任何建议。
给定此类:
data class CSVRecord(private val columns: SortedSet<CSVColumn>) : Iterable<String> {
override fun iterator(): Iterator<String> {
return columns.map { it.value }.iterator()
}
}
Run Code Online (Sandbox Code Playgroud)
spotbugs引发错误:
[错误]从Collection到com.example.CSVRecord.iterator()中抽象类java.util.List的可疑转换。[com.example.CSVRecord]在CSVRecord.kt:[第15行] BC_BAD_CAST_TO_ABSTRACT_COLLECTION
这仅仅是因为Spotbugs不支持Kotlin,还是我的实现可能无效?
openjdk:10.0.1-jre-slim
我有一个名为serviceA
并关联的功能区客户端
serviceA.ribbon.ConnectTimeout=5000
serviceA.ribbon.ReadTimeout=15000
hystrix.command.serviceA.execution.isolation.thread.timeoutInMilliseconds = 20000
Run Code Online (Sandbox Code Playgroud)
我还没有(知道)在类路径上进行spring-retry。我执行./mvnw dependency:list | grep -i retry
并没有结果。
在运行时,我收到以下警告:
命令serviceA的Hystrix超时20000ms设置为小于功能区读取和连接超时的组合40000ms。
考虑到我认为分别将它们设置为15秒和5秒,因此我不确定这些数字来自何处。为什么这个数字翻倍?
hystrix spring-cloud spring-cloud-feign netflix-ribbon spring-cloud-netflix
我正在使用https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin for jenkins,它允许我动态地配置新的云实例作为 AWS EC2 中的构建从属。
我正在启动ami-d834aba1
(Amazon Linux 2017.09.1)。
该插件也支持提供用户数据和块设备映射,目前我在阅读https://cloudinit.readthedocs.io/en/latest/后提供这样的配置
#cloud-config
repo_update: true
repo_upgrade: all
package_upgrade: true
bootcmd:
- [ cloud-init-per, once, mkfs, -t, ext4, /dev/nvme1n1 ]
fs_setup:
- cmd: mkfs -t %(filesystem)s -L %(label)s %(device)s
label: jenkins
filesystem: 'ext4'
overwrite: false
device: '/dev/nvme1n1'
mounts:
- [ /dev/nvme1n1, /jenkins, "ext4", "defaults,nofail", "0", "2" ]
users:
- default
- name: jenkins
homedir: /jenkins
lock_passwd: true
ssh_authorized_keys:
- a-key
Run Code Online (Sandbox Code Playgroud)
/dev/sdd=:100:true:gp2::encrypted
Run Code Online (Sandbox Code Playgroud)
该实例将启动并附加一个新的 100GB 加密 …
给定一个类似的测试类:
@WebMvcTest
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
public class MyControllerTest {
... some tests
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:
java.lang.IllegalStateException:配置错误:为测试类[com.example.MyControllerTest]找到了@BootstrapWith的多个声明:[@ org.springframework.test.context.BootstrapWith(value = class org.springframework.boot.test.autoconfigure .web.servlet.WebMvcTestContextBootstrapper),@ org.springframework.test.context.BootstrapWith(value = class org.springframework.boot.test.context.SpringBootTestContextBootstrapper)]
理想的目标是我只是在运行控制器测试,因此出于测试性能的原因,不想设置整个上下文-我只需要“ Web层”。
我可以删除该@SpringBootTest(properties = "spring.profiles.active=test")
行-但是,现在我还没有激活测试配置文件,它可以通过属性以某种方式自定义Web上下文,例如将不再应用的杰克逊自定义。有没有一种方法可以只对“ Web层”进行测试并仍然激活弹簧轮廓?
我的环境是java version "10.0.2" 2018-07-17
,spring boot1.5.16.RELEASE
spring-test spring-test-mvc spring-boot spring-web spring-boot-test
想象一下,我有一个包含许多子目录的目录,每个子目录包含一些具有相同结构的CSV文件(相同的列数,并且都包含相同的标题).
我知道我可以从父文件夹运行类似的东西
find ./ -name '*.csv' -exec cat {} \; > ~/Desktop/result.csv
Run Code Online (Sandbox Code Playgroud)
这将工作正常,期望每次重复标题(每个文件一次).
我也知道我可以做类似的事情sed 1d <filename>
或tail -n +<N+1> <filename>
跳过文件的第一行.
但就我而言,它似乎更专业.我想为第一个文件保留一次标题,然后跳过每个文件的标题.
是否有人知道使用标准Unix工具(如find,head,tail,sed,awk等)和bash实现这一目标的方法?
例如输入文件
/folder1
/file1.csv
/file2.csv
/folder2
/file1.csv
Run Code Online (Sandbox Code Playgroud)
每个文件都有标题:
A,B,C
每个文件都有一个数据行 1,2,3
期望的输出是:
A,B,C
1,2,3
1,2,3
1,2,3
Run Code Online (Sandbox Code Playgroud)
我觉得这是像其他问题不同的这个和这个特别,因为这些解决方案的参考文件1和文件2的解决方案.我的问题是关于一个具有任意数量文件的目录结构,我不希望逐个输出每个文件.
在Jenkinsfile中是否有这样的阶段:
stage('Create Branch & Push Branch') {
steps {
script {
sh "git checkout -b release/${NEW_TAG}"
sh "git push --set-upstream
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前,这导致:
- git push --set-upstream原始版本/v1.0.3致命:无法读取“ https://github.com ”的用户名:没有此类设备或地址脚本返回退出代码128
该存储库最初是使用以下方式在管道中克隆的:
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: 'develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout'], [$class: 'CleanCheckout'], [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ci-github', url: 'https://github.com/my-org/my-repo.git']]]
Run Code Online (Sandbox Code Playgroud)
该部分可以正常工作(克隆),大概是因为我可以为该步骤提供github的jenkins凭据ID。
我是否有办法做同样的事情来回溯到构建早期克隆的存储库?
1.5.13.RELEASE
Edgware.SR3
我的配置中的一些相关属性:
feign.hystrix.enabled=true
eureka.client.fetch-registry=true
spring.cloud.service-registry.auto-registration.enabled=true
service1.ribbon.listOfServers=https://www.google.com
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序,可以使用伪装客户端与其他3种服务进行通信。其中的两个是通过Eureka服务发现而发现的。这些运作良好。最终服务是具有单个静态主机名的外部服务,我不希望通过Eureka解决此问题。由于我确实希望Eureka可以使用其中的两项服务,因此我希望启用Eureka。
对于最终服务,我尝试将添加service1.ribbon.listOfServers=https://www.google.com
到中application.properties
,但是在调用伪客户端时在运行时会遇到以下错误:
路径为[]的Servlet [dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套的异常是com.netflix.hystrix.exception.HystrixRuntimeException:Service1Client#test()失败,并且没有可用的备用。定价_1 | com.netflix.client.ClientException:负载均衡器没有可供客户端使用的服务器:service1Price_1 | 在com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483)〜[ribbon-loadbalancer-2.2.5.jar!/:2.2.5]
我的客户端配置如下:
@FeignClient("service1")
public interface Service1Client {
@GetMapping(value = "/")
String test();
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的任何建议。
根据我所了解的功能区的精神,它是充当客户端负载平衡器,在我的情况下,没有任何负载平衡(我有一个固定的静态主机名,该主机名在DNS中返回单个A记录)。Ribbon实际上感觉像是一个不必要的组件-我真正想要的是Feign客户端,因为我喜欢这样一个事实,即它抽象了较低级别的HTTP请求和对象序列化。因此,我想一个替代的后续问题是,我可以在没有功能区的情况下使用伪装-似乎开箱即用的好行为是使用功能区-甚至@FeignClient
注释的Javadoc 都说:
如果功能区可用,它将用于对后端请求进行负载均衡,并且可以使用
@RibbonClient
与假客户端相同名称(即值)的来配置负载均衡器。
这表明即使两者服务于不同的目的,两者也具有密切的联系。
spring-cloud spring-cloud-feign netflix-ribbon spring-cloud-netflix
Consider code:
Map prJsonData = readJSON text: '{}'
prJsonData.head = "release/${NEW_TAG}" as String
prJsonData.title = "Release ${NEW_TAG}"
writeJSON(file: 'create-pr.json', json: prJsonData, pretty: 4)
Run Code Online (Sandbox Code Playgroud)
and output
{
"head": "release/v1.0.2",
"title": {
"bytes": [
82,
101,
97
],
"strings": [
"Release ",
""
],
"valueCount": 1,
"values": ["v1.0.2"]
}
}
Run Code Online (Sandbox Code Playgroud)
Why is it that specifying as String
changes the output such that interpolation works but without this the output appears to be some sort of complex type.
groovy ×2
jenkins ×2
spring-boot ×2
spring-cloud ×2
amazon-ec2 ×1
amazon-linux ×1
awk ×1
bash ×1
cat ×1
cloud-init ×1
ftp ×1
git ×1
hystrix ×1
kotlin ×1
linux ×1
maven ×1
sed ×1
sftp ×1
spotbugs ×1
spring-test ×1
spring-web ×1
unix-head ×1
user-data ×1