小编Joh*_*tle的帖子

如何只为Windows下载1.7 JDK,而不是SDK

为休闲java开发人员安装java一直是一个雷区.例如,我们需要SE或EE版本来说STS/Grails,我们需要SDK还是JDK?我很确定我需要JDK 1.7 for EE版.问题是,如何在没有膨胀的SDK的情况下获得JDK?我对SDK的理解是它的附加工具,例如glassfish,我不需要的东西.我的SSD上的空间非常宝贵.

oracle EE下载页面:

http://www.oracle.com/technetwork/java/javaee/downloads/index.html 
Run Code Online (Sandbox Code Playgroud)

似乎只允许你下载JDK和SDK,有没有办法只安装JDK?

我已经安装了64位JDK,但遗憾的是,STS只适用于32位(在Windows上).安装两者时会发生冲突吗?

java

3
推荐指数
1
解决办法
8万
查看次数

grails/hibernate:如何在ID列上禁用自动增量?

默认情况下,当您在grails中创建域对象时,它会添加"id"列并将其设置为在DB中自动递增.

我想在创建/保存对象时提供id参数,而不是使用任何类型的生成(它用于少量静态数据,我希望将ID固定为我给出的值).

我还有其他好处,例如能够在内存中使用正确的ID创建对象,而不必从DB中读取它,然后使该对象与另一个对象成为"包含"类型的关系,如果这是有意义的.

Grails有id列的文档,但没有说如何禁用自动增量并允许将ID传递给域对象构造函数:

http://grails.org/doc/2.1.0/ref/Database%20Mapping/id.html

grails hibernate grails-orm

2
推荐指数
1
解决办法
2298
查看次数

GRAILS 2.4.4:如何仅运行单元测试,或如何修复生成的集成测试?

使用grails 2.4,例如,当您创建控制器时,它会创建一个单元测试类,例如:

@TestFor(SessionService)
class SessionServiceSpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你创建了20个控制器,并获得了20个测试类.

当您尝试运行grails test-app时,它会失败,并显示以下错误:

java.lang.Exception: 
No tests found matching grails test target pattern filter from org.junit.runner.Request
Run Code Online (Sandbox Code Playgroud)

它永远不会运行我们的集成测试.

因此,Grails为您创建的测试无法开箱即用.

我们可以删除所有创建的测试规范类,但是如果我们想要编写它们,那么我们希望它们准备就绪.

  1. 有没有办法运行我们的集成测试,而不运行单元测试(已损坏)或:
  2. 有没有办法修复测试,所以他们不会摔倒?有人发布时添加了一个有效的时间,但是我们不知道该放什么,因为我们尝试的仍会生成相同的异常.

遗憾的是,Grails没有告诉你哪个测试或类会抛出这个异常.

testing grails

2
推荐指数
1
解决办法
1363
查看次数

对于使用tomcat数据库资源通过JNDI的Grails,应该pooled = true或pooled = false

当您使用Grails管理MySQL连接时,您需要(为了处理重新连接)DataSource.groovy中的属性部分:

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
    properties {
        maxActive = -1
        minEvictableIdleTimeMillis=1800000
        timeBetweenEvictionRunsMillis=1800000
        numTestsPerEvictionRun=3
        testOnBorrow=true
        testWhileIdle=true
        testOnReturn=true
        validationQuery="SELECT 1"
    }

environments {
    production{
        dataSource {
            dbCreate = "upate"
            url = "jdbc:mysql://127.0.0.1:3306/mydb"
            username = "myuser"
            password = "mypass"
        }

    }
Run Code Online (Sandbox Code Playgroud)

当您切换到使用Tomcat的连接池时,大多数示例都给出了:

production {
    dataSource {
        dbCreate = "update"
        jndiName = "java:comp/env/revolve"
    }
Run Code Online (Sandbox Code Playgroud)

问题1

对于这种类型的连接(即使用tomcat),应该在DataSource.grovvy中pooled = true或false,还是重要?有帖子说它必须是假的,帖子说它必须是真的,而有些则没有指明它.如果设置为True,则表示存在池池,但这是大多数示例推荐的.

问题2

属性部分是否被忽略?如果不是,建议的字段是什么.根据我的反复试验,属性似乎被忽略了,与此类帖子相反.

例如,使用JNDI时,DataSource.java属性中的validationQuery ="SELECT 1"似乎被忽略.即如果我重新启动数据库,Tomcat上的应用程序已永久失去与数据库的连接.如果我在Tomcat context.xml中添加相同的行:

<Resource name="revolve" auth="Container" type="javax.sql.DataSource"
    maxActive="50" maxIdle="5" maxWait="10000"
    username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver"
    validationquery="SELECT …
Run Code Online (Sandbox Code Playgroud)

grails jndi connection-pooling

2
推荐指数
1
解决办法
1336
查看次数

java jackson XML - 解析时如何忽略外部包装?

XML我想解析的响应是API这样的:

<Envelope>
   <Body>
      <RESULT>
          <SUCCESS>TRUE</SUCCESS>
          <EMAIL>somebody@domain.com</EMAIL>
          ... more stuff...
      </RESULT>
   </Body>
</Envelope>
Run Code Online (Sandbox Code Playgroud)

我想将 的字段RESULT放入一个对象中。

我可以创建 3 个类,一个用于包含正文的信封,一个用于包含结果的正文,一个用于结果。但是,有捷径吗?

例如,只需为结果数据创建一个对象,如下所示:

@JacksonXmlRootElement(localName = "Envelope/Body/RESULT")
public class Result {
    @JacksonXmlProperty(localName = "SUCCESS")
    private boolean success;
    @JacksonXmlProperty(localName = "EMAIL")
    private String Email;
    :
}
Run Code Online (Sandbox Code Playgroud)

我会在这样的行中进行解析:

return theXmlMapper.readValue(resultPayload, Result.class);
Run Code Online (Sandbox Code Playgroud)

java xml jackson xml-deserialization deserialization

2
推荐指数
1
解决办法
2170
查看次数

Inspiration.Builder java如何将json作为字符串而不是实体发布

使用 Java 中的调用构建器,put/post 的唯一选项是一个实体作为它从中获取 json 的对象:

    public <T> T put(final Entity<?> entity, final Class<T> responseType)
Run Code Online (Sandbox Code Playgroud)

如果您已经在字符串中包含 json,是否有任何方法可以放置/发布它,而不必将其转换为实体(我们假设只是一个对象)

String payload = "{\"name\":\"hello\"}";

WebTarget webTarget = theHttpClient.target(url);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON)
                .header(HttpUtils.AUTHORISATION_HEADER_NAME, "Bearer " + theAccessToken); 

// this outputs the string with slashes, i.e. "{\n\"name\":\"hello\"\n}"; instead of {"name":"hello"}
invocationBuilder.put( Entity.json(theObjectMapper.writeValueAsString(payload)), responseClass);

// this will not compile as payload is not an Entity
invocationBuilder.put(payload, responseClass);
Run Code Online (Sandbox Code Playgroud)

java json

2
推荐指数
1
解决办法
9001
查看次数

spring 可以像 grails 一样自动重新加载更改吗?

基于 Spring 的 grails 的主要好处之一是,每次更改一行代码时,您都不需要重新构建和重新运行整个应用程序(这需要几分钟),它只需重新编译该文件并自动- 加载更改。

按照本教程:

https://spring.io/guides/gs/spring-boot/

要运行该应用程序,您必须使用命令行并在 intellij 之外执行此操作:

./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar

如果您更改一行代码,例如在控制器中,您必须终止应用程序,重建它并重新启动它,这需要一段时间。

我在开发工具中遇到了一种叫做自动重启的东西。这是否与自动重新加载更改有关,如果是,它是如何使用的?

spring-boot

2
推荐指数
1
解决办法
1127
查看次数

Azure DevOps 管道以哪个用户身份运行?

我们有 azure DevOps 管道来构建和部署各种项目。

最近,我们想使用“azureblog 文件复制”管道将一些文件复制到 Blob 存储。

这需要在 azure 中对存储帐户进行写访问。

我们的管理员说,无论谁手动运行管道,管道都会运行。如果这是真的,我们将不得不授予所有开发人员和用户对博客存储的读/写访问权限,这将是疯狂的。

我认为他是错的,管道作为特定的指定用户运行,无论它们是如何启动的。问题是,如何找出给定管道的该用户是什么?

“编辑管道”在顶部附近有一个安全选项卡,其中列出了“Azure Devops 组”的一部分,这些组可能是有能力运行管道的组。

但是用户定义的管道在哪里呢?

azure-devops azure-pipelines

2
推荐指数
1
解决办法
8847
查看次数

删除/重置远程主Git存储库

我们有一个Assembla远程仓库。Assembla目前不提供免费的私人存储库,因此我们想重新使用我们的旧存储库之一。该仓库有一个master分支和许多文件/提交。

我们如何摆脱所有内容,包括所有文件和历史记录,从而使我们可以重新开始一个新项目?

首先,我有最新的回购清单。

我试着这样删除远程主分支:

git push origin :master.
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

remote:错误:默认情况下,拒绝删除当前分支,因为下一个remote:错误:'git clone'不会导致签出任何文件,从而引起混乱。

所以我尝试创建一个新分支,将其推送,然后从另一个分支中删除master,从而:

git checkout -b tempy
git push origin tempy
git push origin :master
Run Code Online (Sandbox Code Playgroud)

我犯了同样的错误。

我可以切换回master,在本地删除所有文件,然后提交并推送,但是他留下了很多不需要的历史记录。

有任何想法吗?

git

1
推荐指数
1
解决办法
4683
查看次数

grails,如何强制浏览器下载文件

在控制器中,我这样做是为了尝试在用户单击链接时让浏览器下载文件:

    render( contentType: 'text/csv', text: output);
Run Code Online (Sandbox Code Playgroud)

这在 Chrome 中有效,但在 IE 或 safari 中不起作用,它们只显示数据。此外,它还将文件名显示为数字(恰好是 url 上的 Id,例如 www.me.com/show/1

显然。修复下载的方法是转换为八位字节流。这可以在 htaccess 文件中完成,但我不使用 apache。在grails中有什么方法可以做到这一点吗?我想这是一个常见的场景。

在 php 中,人们可能会这样做:

  header('Content-Disposition: attachment; filename="downloaded.csv"');
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

阅读下面的两个回复后(谢谢!),这有效:

response.setHeader "Content-disposition", "attachment; filename=report.csv"
    response.contentType = 'text/csv'
    response.outputStream << output
    response.outputStream.flush()
Run Code Online (Sandbox Code Playgroud)

令人惊奇的是,我可以获取一个字符串并使用 << 将其写入输出流。我打算尝试找出如何将字符串变成流的形式。

grails download

1
推荐指数
1
解决办法
4259
查看次数

如何在二维javascript数组中设置一个值

我试图在二维数组中设置单个值,但它不起作用.

请考虑以下有关该主题的许多示例中的代码:

// create a 3x3 array with -1 in every position:
let a = new Array(3).fill(new Array(3).fill(-1))
console.log(`a: ${JSON.stringify(a)}`)
a[1][2] = 0
console.log(`a: ${JSON.stringify(a)}`)
Run Code Online (Sandbox Code Playgroud)

输出如下:

a: [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]
a: [[-1,-1,0],[-1,-1,0],[-1,-1,0]]
Run Code Online (Sandbox Code Playgroud)

我们可以看到,它不是设置单个单元,而是实际上将数组中的3个位置设置为0,即它设置[0] [2]和[1] [2]和[2] [2] = 0.很奇怪.

我试过这个:

let a = new Array(3).fill(new Array(3).fill(-1))
console.log(`a: ${JSON.stringify(a)}`)
a[1,2] = 0
console.log(`a: ${JSON.stringify(a)}`)
Run Code Online (Sandbox Code Playgroud)

这给了更奇怪的结果:

a: [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]
a: [[-1,-1,-1],[-1,-1,-1],0]
Run Code Online (Sandbox Code Playgroud)

我疯了,还是javascript不支持在二维数组中设置值?

javascript arrays

1
推荐指数
1
解决办法
66
查看次数

Azure 管道:未找到错误 MSB4019 WebApplication.targets

我创建了一个 episerver 合金项目,在设置了一些 nuget 包后,它在 Visual Studio 中构建和运行良好,我可以部署到 azure 并从 VS 以 azure 运行,没有问题。

我现在正试图让构建在管道中工作。

按照说明,我添加了一个“nuget restore”任务,并将其指向 NuGet.config。这有效。

然后它进入构建阶段,并给出:

D:\a\1\s\DxcAlloy.csproj(335,3): 错误 MSB4019: 导入的项目 "C:\Program Files\dotnet\sdk\3.1.202\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft .WebApplication.targets”未找到。确认导入声明“C:\Program Files\dotnet\sdk\3.1.202\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets”中的表达式正确,并且该文件存在于磁盘上。

我不知道如何调试这个。有些帖子说,如果您没有安装 Visual Studio,可能会发生错误,但我无法在 azure 管道上安装 Visual Studio...

我删除了现有的“.net 恢复”任务,因为它失败了,我猜测我只需要我的 nuget 恢复 - 这是一个猜测。

管道“代理规范”是vs2017-win16

该项目是在 VS 2019 中创建的。

无奈之下,我添加了一个“Use .NET core”任务,并将版本设置为构建抱怨丢失的版本,即3.1.202。

这没有帮助。

有任何想法吗?

azure azure-pipelines

1
推荐指数
1
解决办法
3471
查看次数

springSecurityService如何以明文形式存储密码?

本教程:

http://spring.io/blog/2010/08/11/simplified-spring-security-with-grails/

说你应该创建这样的用户:

def adminUser = SecUser.findByUsername('admin') ?: new SecUser(
            username: 'admin',
            password: springSecurityService.encodePassword('admin'),
            enabled: true).save(failOnError: true)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.它只适用于您:

           password: 'admin'
Run Code Online (Sandbox Code Playgroud)

我假设(但可能是错误的)将密码以纯文本形式存储在内部数据库中(不是散列).

有没有办法告诉spring加密或哈希密码?它不在任何教程中,并且无法在Grails 2.3.6手册中找到它,安全核心2.0-RC2和UI,默认安装.

我已经看到它说默认情况下grails与bcrypt一起使用,但我不知道如何验证这一点.我想我需要安装mysql,告诉grails使用它,然后我可以查询值.

grails spring-security

0
推荐指数
1
解决办法
162
查看次数