为休闲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上).安装两者时会发生冲突吗?
默认情况下,当您在grails中创建域对象时,它会添加"id"列并将其设置为在DB中自动递增.
我想在创建/保存对象时提供id参数,而不是使用任何类型的生成(它用于少量静态数据,我希望将ID固定为我给出的值).
我还有其他好处,例如能够在内存中使用正确的ID创建对象,而不必从DB中读取它,然后使该对象与另一个对象成为"包含"类型的关系,如果这是有意义的.
Grails有id列的文档,但没有说如何禁用自动增量并允许将ID传递给域对象构造函数:
使用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为您创建的测试无法开箱即用.
我们可以删除所有创建的测试规范类,但是如果我们想要编写它们,那么我们希望它们准备就绪.
遗憾的是,Grails没有告诉你哪个测试或类会抛出这个异常.
当您使用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) 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 中的调用构建器,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) 基于 Spring 的 grails 的主要好处之一是,每次更改一行代码时,您都不需要重新构建和重新运行整个应用程序(这需要几分钟),它只需重新编译该文件并自动- 加载更改。
按照本教程:
https://spring.io/guides/gs/spring-boot/
要运行该应用程序,您必须使用命令行并在 intellij 之外执行此操作:
./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar
如果您更改一行代码,例如在控制器中,您必须终止应用程序,重建它并重新启动它,这需要一段时间。
我在开发工具中遇到了一种叫做自动重启的东西。这是否与自动重新加载更改有关,如果是,它是如何使用的?
我们有 azure DevOps 管道来构建和部署各种项目。
最近,我们想使用“azureblog 文件复制”管道将一些文件复制到 Blob 存储。
这需要在 azure 中对存储帐户进行写访问。
我们的管理员说,无论谁手动运行管道,管道都会运行。如果这是真的,我们将不得不授予所有开发人员和用户对博客存储的读/写访问权限,这将是疯狂的。
我认为他是错的,管道作为特定的指定用户运行,无论它们是如何启动的。问题是,如何找出给定管道的该用户是什么?
“编辑管道”在顶部附近有一个安全选项卡,其中列出了“Azure Devops 组”的一部分,这些组可能是有能力运行管道的组。
但是用户定义的管道在哪里呢?
我们有一个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,在本地删除所有文件,然后提交并推送,但是他留下了很多不需要的历史记录。
有任何想法吗?
在控制器中,我这样做是为了尝试在用户单击链接时让浏览器下载文件:
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)
令人惊奇的是,我可以获取一个字符串并使用 << 将其写入输出流。我打算尝试找出如何将字符串变成流的形式。
我试图在二维数组中设置单个值,但它不起作用.
请考虑以下有关该主题的许多示例中的代码:
// 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不支持在二维数组中设置值?
我创建了一个 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。
这没有帮助。
有任何想法吗?
本教程:
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 ×5
java ×3
arrays ×1
azure ×1
azure-devops ×1
download ×1
git ×1
grails-orm ×1
hibernate ×1
jackson ×1
javascript ×1
jndi ×1
json ×1
spring-boot ×1
testing ×1
xml ×1